一、总结1:外部类和成员内部类声明成员的规则
外部类 和 成员内部类 声明成员时,关注的点在于:是否能够声明静态成员;跟公有、私有无关。
1. 外部类
外部类既能声明非静态成员,又能声明静态成员。
2. 成员内部类
成员内部类分为:非静态成员内部类 和 静态成员内部类
为了兼容JDK16以下版本的代码,建议严格按照JDK16之前的规则编写代码。即:非静态成员内部类不允许声明自己的静态成员。
二、总结2:各种类访问成员的规则
1. 本类访问自己的成员
包括 成员内部类访问自己内部类成员 与 外部类访问自己外部类成员
(1) 非静态方法中:访问(非静态/静态)成员:直接访问;
(2) 静态方法中:访问非静态成员:new 本类().成员;
访问静态成员:直接访问
2. 成员内部类访问外部类成员
(1) 非静态成员内部类要访问外部类的成员,需要通过以下方式访问:
① 访问外部类的非静态成员:通过“外部类名.this.成员”访问。
② 访问外部类的静态成员:通过“外部类名.成员”访问。
(2) 静态成员内部类要访问外部类的成员,需要通过以下方式访问:
① 访问外部类的非静态成员:生成外部类实例对象,并调用外部类不同名的成员。
② 访问外部类的静态成员:通过“外部类名.成员”访问。
3. 外部类访问成员内部类的成员
(1) 外部类访问成员内部类,要先遵循 [本类访问自己的成员] 的规则:
① 非静态方法中:创建(非静态/静态)成员内部类对象: new 成员内部类();
② 静态方法中:创建非静态成员内部类对象:new 本类().new 成员内部类();
创建静态成员内部类对象: new 成员内部类();
(2) 获得成员内部类的对象后,利用对象去访问内部类的(非静态/静态)成员:成员内部类对象.成员
(3) 特殊:外部类要访问静态成员内部类的静态成员,可以直接:静态内部类.静态成员
无需创建成员内部类对象。
4. 外部类外面的类 访问 外部类的成员内部类
外部类外面的类,我们可以称为:其他外部类
如果成员内部类的权限修饰符允许,那么在外部类的外面也可以使用成员内部类,但是必须依赖外部类。
而且访问的规则跟内部类成员的公有或者私有相关。
1.在其他外部类的所有类型方法中,访问(非静态/静态)成员内部类的成员
(1) 先通过外部类的对象创建内部类的对象:
(外部类对象 调用 内部类对象)
① 非静态内部类对象:Outer.Inner inner = new Outer().new Inner();
(Outer.Inner() 是 外部类名 调用 静态成员内部类的构造器方法())
② 静态内部类对象: Outer.Inner inner = new Outer.Inner();
(2) 获得内部类的对象后,该对象访问自己的(公有/私有)成员,有以下规则:
① 公有成员:
[1] 访问公有(非静态 / 静态)成员:内部类对象.公有成员;
[2] 访问公有静态成员:外部类名.内部类名.静态成员;
② 私有成员:
私有成员只能通过内部类公有的GetXxx方法访问。否则不能访问: 内部类对象.getXxx();