Java内部类
在Java的类中有5大成员:
1、属性 2、构造器 3、方法 4、代码块 5、内部类
内部类根据特点又分为四种
定义在在外部类的局部位置上(比如方法内)
- 有类名的叫 局部内部类/方法内部类
- 没有类名的叫 匿名内部类. (重点!!!!!)
定义在外部类的成员位置上
- 没有static修饰的叫 成员内部类
- 有static修饰的叫 静态内部类
局部内部类的使用细节
1、可以直接访问所在外部类的所有成员,包括私有的private
2、不能添加访问修饰符,因为它本质是个局部变量。局部变量不能使用访问修饰符,但可以使用final修饰,因为局部变量本身就可以使用final修饰。
3、作用域:仅仅在定义它的方法或代码块中
4、局部内部类-----访问---->外部类成员【访问方式:直接访问】
5、外部类-----访问------》局部内部类成员【访问方式:创建对象,再访问(必须在作用域内创建对象调用)】
6、外部其他类----不能访问----局部内部类
7、当外部类与局部内部类成员重名时,默认遵循就近原则,如果想访问外部类的成员,可以使用(外部类.this.成员)来访问
匿名内部类的使用细节
局部内部类的使用细节除了局部内部类的所有细节外还有以下需要注意:
它的具体格式为
new 父类(参数列表) 或 父接口(){//匿名内部类实现部分 }
理解:
new 父类(参数列表) 或 父接口{}
这相当于创建了一个实例对象,后面的一对大括号表示该对象是父类的子类对象,该子类是匿名的。大括号内的实现代码包括对父类方法的重写或接口抽象方法的实现
成员内部类的使用细节
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();
内部类同样可以访问所有外部成员,但如果内部类被声明为私有,外部类则无法访问到内部类
静态内部类的使用细节
外部类名.内部类名 变量名 = new 外部类名.内部类名();
静态内部类只能访问外部类的静态成员
并且只有静态内部类中才可以定义静态成员