Android(java)学习笔记111:成员位置的内部类的介绍

1.内部类的定义

 1 /*
 2     内部类概述:
 3         把类定义在其他类的内部,这个类就被称为内部类。
 4         举例:在类A中定义了一个类B,类B就是内部类。
 5
 6     内部的访问特点:
 7         A:内部类可以直接访问外部类的成员,包括私有。
 8         B:外部类要访问内部类的成员,必须创建对象。
 9
10 */
11 class Outer {
12     private int num = 10;
13
14     class Inner {
15         public void show() {
16             System.out.println(num);
17         }
18     }
19
20     public void method() {
21         //找不到符号
22         //show();
23
24         Inner i = new Inner();
25         i.show();
26     }
27
28 }
29
30 class InnerClassDemo {
31     public static void main(String[] args) {
32
33     }
34 }

2.内部类的位置

 1 /*
 2     内部类位置
 3         成员位置:在成员位置定义的类,被称为成员内部类。
 4         局部位置:在局部位置定义的类,被称为局部内部类。
 5
 6
 7     成员位置:在成员位置定义的类,被称为成员内部类。
 8
 9 */
10 class Outer {
11     private int num = 10;
12
13     //成员位置
14     /*
15     class Inner {
16
17     }
18     */
19
20
21     public void method() {
22         //局部位置
23         class Inner {
24
25         }
26     }
27 }
28
29 class InnerClassDemo2 {
30     public static void main(String[] args) {
31
32     }
33 }
 1 /*
 2     成员内部类:
 3         如何直接访问内部类的成员。
 4         外部类名.内部类名 对象名 = 外部类对象.内部类对象;
 5 */
 6 class Outer {
 7     private int num = 10;
 8
 9     class Inner {
10         public void show() {
11             System.out.println(num);
12         }
13     }
14 }
15
16 class InnerClassDemo3 {
17     public static void main(String[] args) {
18         //需求:我要访问Inner类的show()方法
19         //Inner i = new Inner();
20         //i.show();---这样的方式是错误的
21
22         //格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
23         Outer.Inner oi = new Outer().new Inner();
24         oi.show();
25     }
26 }

3.实例梳理成员内部类的修饰符

 1 /*
 2     成员内部类的修饰符:
 3         private 为了保证数据的安全性
 4         static 为了方便访问数据
 5             注意:静态内部类访问的外部类数据必须用静态修饰。
 6
 7     案例:我有一个人(人有身体,身体内有心脏。)
 8
 9         class Body {
10             private class Heart {
11                 public void operator() {
12                     System.out.println("心脏搭桥");
13                 }
14             }
15
16             public void method() {
17                 if(如果你是外科医生) {
18                     Heart h = new Heart();
19                     h.operator();
20                 }
21             }
22         }
23
24         按照我们刚才的讲解,来使用一下
25         Body.Heart bh = new Body().new Heart();
26         bh.operator();//但是我们是不希望外界对我们自己身体内部"心脏"进行操作的,怎么样才能实现这个?
27         //加了private后,就不能被访问了,那么,怎么玩呢?
28         Body b =  new Body();
29         b.method();
30 */
31 class Outer {
32     private int num = 10;
33     private static int num2 = 100;
34
35     //内部类用静态修饰是因为内部类可以看出是外部类的成员
36     public static class Inner {
37         public void show() {
38             //System.out.println(num);//静态内部类访问外部类数据必须是静态修饰的,num不是静态,所以不能访问,num2可以访问
39             System.out.println(num2);
40         }
41
42         public static void show2() {
43             //System.out.println(num);
44             System.out.println(num2);
45         }
46     }
47 }
48
49 class InnerClassDemo4 {
50     public static void main(String[] args) {
51         //使用内部类
52         // 限定的新静态类,下面这样写法是错误的,内部类加了静态static修饰之后,是不能通过外部对象访问的,直接调用类名访问
53         //Outer.Inner oi = new Outer().new Inner();
54         //oi.show();
55         //oi.show2();
56
57         //成员内部类被静态修饰后的访问方式是:
58         //格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
59         Outer.Inner oi = new Outer.Inner();
60         oi.show();
61         oi.show2();
62
63         //show2()的另一种调用方式
64         Outer.Inner.show2();
65     }
66 }

4.面试题

 1 /*
 2     面试题:
 3         要求请填空分别输出30,20,10。
 4
 5     注意:
 6         1:内部类和外部类没有继承关系。
 7         2:通过外部类名限定this对象
 8             Outer.this
 9 */
10 class Outer {
11     public int num = 10;
12     class Inner {
13         public int num = 20;
14         public void show() {
15             int num = 30;
16             System.out.println(num);
17             System.out.println(this.num);
18             //System.out.println(new Outer().num);//这个是也是可以实现的
19             System.out.println(Outer.this.num);
20         }
21     }
22 }
23 class InnerClassTest {
24     public static void main(String[] args) {
25         Outer.Inner oi = new Outer().new Inner();
26         oi.show();
27     }
28 }
时间: 2024-10-24 15:28:59

Android(java)学习笔记111:成员位置的内部类的介绍的相关文章

Java学习笔记23---内部类之局部内部类只能访问final的局部变量

局部内部类是定义在方法体或代码块中的类,在笔记19中已有过简单介绍. 今天要讨论的是局部内部类为什么只能访问为常量的局部变量. 作者: 博客园--蝉蝉 请尊重作者劳动成果,转载请在标题注明"转载"字样,并标明原文链接: http://www.cnblogs.com/chanchan/p/8402411.html 参考资料: http://www.cnblogs.com/dolphin0520/p/3811445.html 1.首先来了解一下局部内部类是如何访问局部变量的 Person类

Java学习笔记(七):内部类、静态类和泛型

内部类 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一下这四种内部类的用法. 成员内部类 成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员). 1 class Circle { 2 private double radius = 0; 3 public static int count =1; 4 public Circ

Java学习笔记2(输入与随机数简单介绍)

输入: import java.util.Scanner; public class ScannerDemo{ public static void main(String[ ] args){ Scanner sc = new Scanner(System.in); int i = sc.nextInt(); System.out.println(i+1); String s = sc.next(); System.out.println(s+1); }} 输入1,输出2,再输入1,输入11 随

java/android 设计模式学习笔记(16)---命令模式

这篇博客我们来介绍一下命令模式(Command Pattern),它是行为型设计模式之一.命令模式相对于其他的设计模式更为灵活多变,我们接触比较多的命令模式个例无非就是程序菜单命令,如在操作系统中,我们点击关机命令,系统就会执行一系列的操作,如先是暂停处理事件,保存系统的一些配置,然后结束程序进程,最后调用内核命令关闭计算机等,对于这一系列的命令,用户不用去管,用户只需点击系统的关机按钮即可完成如上一系列的命令.而我们的命令模式其实也与之相同,将一系列的方法调用封装,用户只需调用一个方法执行,那

java/android 设计模式学习笔记(5)---对象池模式

这次要介绍一下对象池模式(Object Pool Pattern),这个模式为常见 23 种设计模式之外的设计模式,介绍的初衷主要是在平时的 android 开发中经常会看到,比如 ThreadPool 和 MessagePool 等. 在 java 中,所有对象的内存由虚拟机管理,所以在某些情况下,需要频繁创建一些生命周期很短使用完之后就可以立即销毁,但是数量很大的对象集合,那么此时 GC 的次数必然会增加,这时候为了减小系统 GC 的压力,对象池模式就很适用了.对象池模式也是创建型模式之一,

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

java/android 设计模式学习笔记(一)---单例模式

前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使用的时候也会有一些坑. PS:对技术感兴趣的同鞋加群544645972一起交流 设计模式总目录 java/android 设计模式学习笔记目录 特点 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 单例模式的使用很广泛,比如:线程池(threadpool).缓存(cache).对

java/android 设计模式学习笔记(7)---装饰者模式

这篇将会介绍装饰者模式(Decorator Pattern),装饰者模式也称为包装模式(Wrapper Pattern),结构型模式之一,其使用一种对客户端透明的方式来动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一,但比继承更加灵活.在现实生活中也可以看到很多装饰者模式的例子,或者可以大胆的说装饰者模式无处不在,就拿一件东西来说,可以给它披上无数层不一样的外壳,但是这件东西还是这件东西,外壳不过是用来扩展这个东西的功能而已,这就是装饰者模式,装饰者的这个角色也许各不相同但是被装饰的对