内部类有:
1. 成员内部类
2. 局部内部类(匿名内部类)
============================================
成员内部类
定义在成员位置的类
内用外,随意访问 ; 外用内,需要内部类对象
如何使用成员内部类
1. 间接方式: 通过外部类对象调用外部类方法,里面间接使用内部类
2. 直接方式:
外类名.内类名 对象名 = new 外类名().new 内类名(); :
内部类重名变量的访问
内部类的局部变量: 就近原则
内部类的成员变量: this.变量名
外部类的成员变量: 外类名.this.变量名
===========================================
局部内部类
一个类定义在一个方法的内部
"局部" : 只有在当前所属的方法可以使用它,出了方法就不能用了
局部内部类,如果访问所在方法的局部变量,那么这个局部变量必须是"有效final的"
注: 从Java 8 开始,只要局部变量事实不变,那么final关键字可以省略
===========================================
匿名内部类
如果接口的实现类(或者父类的子类)只需要用一次,那么这种情况下就可以省略掉该类的定义,而改为使用"匿名内部类"
格式 :
接口名 对象名 = new 接口名() {
//覆盖重写所有抽象方法
};
解析 :
1.new 代表创建对象的动作
2.接口名称就是匿名内部类需要实现哪个接口
3.{ ... } 是匿名内部类的内容
注意 :
1.匿名内部类在创建对象时,只能使用唯一一次
2.注意匿名内部类和匿名对象的区别
匿名内部类省略的是 实现类/子类名称 , 匿名对象省略的是 对象名称
===========================================
类的权限修饰符
1. 外部类: public default
2. 成员内部类: 都可以
3. 局部内部类: 什么都不能写