首页 > 代码库 > 内部类

内部类

1,成员内部类:    Outer$Inner.class

 (1)将类定义到了另一个类的内部。A类要直接访问B类中的成员时,可以将A类定义到B类中。作为B类的内部类存在。相当于外部类的一个成员。

 (2)访问规则:

       a)内部类可以直接访问外部类中的成员。

       b)外部类要想访问内部类,只能创建内部类的对象来访问。

       c)如果内部类权限是非私有的,就可以在外部其他程序中被访问到。就可以通过创建外部类对象完成。Outer.Inner in=new Outer().new Inner();

Class Outer{
   
    class Inner{//非静态类
      show1(){      }  //非静态
    }

}

  (3)内部类可以直接访问外部类中的成员,是因为内部类持有了外部类的引用:外部类名.this (Outer.this),但是如果内部类为静态的就没有此引用了。

2,静态内部类

Class Outer{
   
   static class Inner{
      show1(){      }  //非静态
      static show2(){    }//静态
    }

}

   (1)静态,非私有的内部类访问方式:访问非静态成员

           Outer.Inner in=new  Outer.Inner();  in.show1();

   (2)静态,非私有的内部类访问方式:访问静态成员

          Outer.Inner.show2();

   注意:非静态内部类中只允许定义静态的常量(static final double PI=3.1415),不可以定义其他静态成员。

3,局部内部类 Outer$1 Inner.class 将内部类定义到了局部位置上。

  (1)Java中的内部类不可以访问所在局部的局部变量,生命周期不同,编译时会报错。可以访问局部中的常量,final修饰的局部变量。

 4,匿名内部类Outer$1.class 简化书写的内部类。

   (1)使用前提:内部类需要继承或者实现外部的类或者接口。

    格式:new 父类or接口名(){子类的内容}

abstract class FU{
     abstract void show();
}
class Outer{
   private int num=4;
   public void method(){
      
      new FU(){//匿名内部类
               //覆盖FU中的抽象方法。
          public void show()
{
System.out.println("show------"+num);
} }.show();//调用匿名内部类中的方法
}
}

 (2)匿名内部类其实就是一个子类对象 

 

内部类