目录
1.一个类的内部嵌套了另一个类,外面的类称外部类,里面的类称内部类
2.类的五大成员有①.属性 ②.方法 ③.构造器 ④.代码块 ⑤.内部类
4.内部类可分为①.局部内部类 ②.匿名内部类 ③.成员内部类 ④.静态内部类
5.内部类访问外部类成员时可以直接进行访问(静态内部类只能访问静态成员),外部类访问内部类时需先创建对象再进行访问
6.只有静态内部类可以有静态的属性和方法,其他三个内部类都不行
1.定义在外部类局部位置上分为①.局部内部类 ②.匿名内部类(某种意义上和局部变量一样)
3.作用域为定义它的地方。内部类访问外部类成员时可以直接进行访问,外部类访问内部类时需先创建对象再进行访问
4.重名时遵循就近原则,访问外部成员可以使用外部类名.this.成员名
3.定义在外部类成员位置上分为①.成员内部类 ②.静态内部类(内部类为类的成员)
一.内部类
1.一个类的内部嵌套了另一个类,外面的类称外部类,里面的类称内部类
A类为外部类,aa为内部类
2.类的五大成员有①.属性 ②.方法 ③.构造器 ④.代码块 ⑤.内部类
3.内部类可以直接访问私有属性
4.内部类可分为①.局部内部类 ②.匿名内部类 ③.成员内部类 ④.静态内部类
5.内部类访问外部类成员时可以直接进行访问(静态内部类只能访问静态成员),外部类访问内部类时需先创建对象再进行访问
6.只有静态内部类可以有静态的属性和方法,其他三个内部类都不行
①②
③④
7.匿名内部类最后必须加分号;
二.内部类的分类
1.定义在外部类局部位置上分为①.局部内部类 ②.匿名内部类(某种意义上和局部变量一样)
①.局部内部类(有类名)
AA类为局部内部类
输出:
②.匿名内部类(无类名)
它既有定义类的特征,也有创建对象的特征
此处编译类型为A类,运行类型为匿名内部类,进行向上转型,main方法中调用A类的a()方法,a()方法中创建匿名内部类并调用A类的aa1()方法,A类的aa1()方法中调用a1(),a1()动态绑定匿名内部类的a1()
输出:
2.局部内部类和匿名内部类的共同点
1.可以访问外部类的所有成员
2.只能用final进行修饰,访问修饰符为默认的
3.作用域为定义它的地方。内部类访问外部类成员时可以直接进行访问,外部类访问内部类时需先创建对象再进行访问
下图可见在定义内部类AA的方法a()中是可以通过创建对象来调用的,在外部类和外部类的其他方法中则不能创建内部类AA的对象
4.重名时遵循就近原则,访问外部成员可以使用外部类名.this.成员名
3.定义在外部类成员位置上分为①.成员内部类 ②.静态内部类(内部类为类的成员)
①.成员内部类(无static修饰)
重名时遵循就近原则,访问外部成员可以使用外部类名.this.成员名
AA类为成员内部类
输出:
②.静态内部类(有static修饰)
重名时遵循就近原则,访问外部成员可以使用外部类名.成员名
输出:
只能访问外部类的静态成员
4.成员内部类和静态内部类的共同点
1.可以添加任意的访问修饰符