【1】内部类:把类A 定义到类B的内部。类A就被称为内部类。
内部类分类:
A:成员内部类(类中方法外)
B:局部内部类(方法中)
成员内部类的訪问特点:
A:内部类能够直接訪问外部类的成员。包含私有。
B:而外部类要想訪问内部类。必须创建内部类的对象。
C:在外部类外面要想訪问内部类不能直接訪问。能够间接訪问
外部类名.内部类名 变量= 外部类对象.内部类对象。
Outer.Inner oi = new Outer().new Inner();(不经常使用)
成员内部类的经常使用修饰符:
A:private 为了保证数据安全性(比較常见)。
B:static 为了方便调用
假设一个内部类是静态的,測试类要想直接訪问,这个时候创建对象的格式和Outer.Inner oi = new Outer().new Inner()不一样,格式为:
外部类名.内部类名 变量 = new 外部类名.内部类名();
Outer.Inner oi = new Outer.Inner();
局部内部类
面试题:
为什么局部内部类訪问局部变量,局部变量必须被final修饰呢?
A:防止在使用后数据发生改变。
B:加final是为了延长变量的生命周期。
【2】匿名内部类:没有名字的内部类
格式:
new 类名或者接口名(){
重写类或接口中的方法。
或者自定义方法。(一般不会自定义方法)
};
理解:本质是继承了类或者实现了接口的子类匿名对象
匿名内部类中方法的调用格式:
方式一
new 类名或者接口名(){
重写类或接口中的方法。
或者自定义方法。
(一般不会自定义方法)
}.方法名()。
方式二:利用多态进行调用
一般来说,这样的使用方法的时候。基本上都是一个接口。并且接口中一般仅仅有一个方法。
假设开发中给我们一个方法,參数是一个接口,那么我们就应该这样解决:
方式一:自己定义类实现接口。创建实现类的对象。
方式二:使用匿名内部类进行解决。
注意:
A:假设一个操作完成后还能够调用其它方法那么该操作返回的肯定是一个对象。