标签:内部类 匿名内部类 成员内部类 局部内部类 接口的子类匿名对象
【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:如果一个操作完毕后还可以调用其他方法那么该操作返回的肯定是一个对象。
标签:内部类 匿名内部类 成员内部类 局部内部类 接口的子类匿名对象
原文地址:http://blog.csdn.net/u013033038/article/details/44337283