内部类理解

内部类:
定义:
  定义在另外一个类中的类,就是内部类。
  编译后生成的两个独立的类:Outer.class 和Outer$Inner.class。
  
内部类的分类:
  静态内部类:静态内部类定义在类中,任何方法外,用static修饰
   静态内部类只能访问外部类的静态成员。
   在外部类的外部,要创建一个静态内部类对象不需要外部类对象:
    Outer.Inner in = new Outer.Inner();
   在本类内部生成内部类对象的方式:
    Inner in = new Inner();

  成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列
   在内部类中可以直接访问外部类的私有属性。
   内部类和外部类的实例变量允许命名冲突。
    在内部类中访问实例变量:this.属性
    在内部类访问外部类的实例变量:外部类名.this.属性
   在外部类的外部,要创建一个成员内部类对象,要首先建立一个外部类对象,然后再创建一个成员内部类对象。
    Outer out = new Outer();
    Outer.Inner in = out.new Inner();
   在本类内部生成内部类对象的方式:
    在静态方法中:Inner in = new Outer().new Inner();
    在非静态方法中:Inner in = this.new Inner();

 成员内部类不可以有静态成员,这是因为静态属性是在加载类的时候创建,这个时候内部类还没有被创建。
   
  局部内部类:在外部类的方法中定义的内部类
   与局部变量类似,在局部内部类前不可以加修饰符public和private,其作用域为定义它的代码块。
   局部内部类不仅可以访问外部类的实例变量,还可以访问外部类的局部变量,但要求外部类的局部变量必须为final的。
   配合接口使用,来做到强制弱耦合。
   在外部类的外部不可创建局部内部类对象,只能在局部内部类所在的方法中创建:
    Inner in = new Inner();
   
  匿名内部类:一种特殊的局部内部类
   没有名字,也没有class、extends、implements关键字
   用一种隐含的方式实现一个接口或继承一个类,并且只能创建一次实例。
   实现方式:在某个语句中,new 父类/父接口名字(){ 类体中实现方法 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章