Android——Java内部类个人学习小结
Java内部类——是指在一个外部类的内部再定义一个类,类名不需要同文件夹名相同,平时编译时用的不多,多用于监听情况下;分为成员内部类、局部内部类、静态嵌套类、匿名内部类;是一个独立的类。对于一个名为outer的外部类和其内部定义的名为inner的内部类。编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。如果外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
成员内部类
class Outer {
class Inner{}
}
由于成员内部类需要先创建了外部类,所以成员内部类不能含有static的变量和方法。成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:
外部类.this.成员
访问成员内部类的方法如下:
//第一种方式:
Outter outter = new Outter();
Outter.Inner inner = outter.new Inner(); //必须通过Outter对象来创建
//第二种方式:
Outter.Inner inner1 = outter.getInnerInstance();
局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
class Outer {
public void doSomething(){
class Inner{
public void seeOuter(){}} }}
(1)、局部内部类只能在定义该内部类的方法或者作用域内实例化
(2)、局部内部类对象不能使用该内部类所在方法的非final局部变量。
静态嵌套类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类不能访问外部类的成员和方法。
匿名内部类
匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。
匿名内部类分为:继承式的匿名内部类、接口式的匿名内部类(interface)、参数式的匿名内部类。
参考材料:http://www.cnblogs.com/dolphin0520/p/3811445.html
浙公网安备 33010602011771号