内部类
内部类的分类
成员内部类:在外部类的成员位置定义类
局部内部类:在局部位置(外部类的成员方法)定义的一个类
访问内部类的成员方式
外部类名.内部类 对象名 = 外部类对象().内部类对象();
成员内部类他的一些修饰符
private :能够保证内部类的数据安全性
static:静态的成员内部类 被static修饰的成员内部类:它里面的成员方法(可以静态、非静态)只能访问
外部类中的静态成员(必须使用static修饰)
访问静态成员内部类的成员方法方式
外部类.内部类 对象名 = new外部类类名.内部类名();
局部内部类: 在局部位置定义的类
特点:1、可以直接访问外部类的成员,包括私有。
2、在外部类的成员方法中,可以通过创建局部类对象来访问局部内部类的成员
注:在jdk7以前(包括),局部内部类访问局部变量,,局部变量必须加入final,否则报错1
jdk7以后,局部变量会自动加上final,开发者不需要定义fianl,为什么要加final
原因:局部变量的生命周期,随着方法调用而存在,随着方法调用完毕而消失,而当前这个局部变量被局部内部类在进行访问(局部内部类对象进行访问),在堆内存中对象不会被立即回收,他还在继续使用这个变量,需要将它定义为常量(常驻内存)以便局部内部类对象对该局部变量访问。
匿名内部类
它是内部类一种简化方式
格式 new 类名/接口名(){
方法重写;
};
匿名内部类的好处:
省去繁杂的代码,不需要定义类里面的子类或者是接口的子实现类,写法比较简单
匿名内部类的本质是:继承该类或者是实现了接口的子类对象。
1、在内部类中 不存在继承关系
2、就近原则:在成员内部类中,如果外部类的成员变量和内部类变量名称一样,先在局部位置找,如果有么就是用
3、在内部类中,可以通过外部类名。this(外部类名限定.this)访问外部类里面的成员变量