内部类

  内部类
  1.成员内部类
   内部类可以随意使用外部类的成员方法和成员变量,哪怕是这些成员被修饰为private。
   外部类不能使用内部类的成员。
   内部类对象依赖外部类对象创建
   class OuterClass{
   innerClass inner=new InnerClass();
   public void ouf(){
  inner.inf();
  }
   class InnerClass{
   InnerClass(){}
   int i=0;
   public void inf(){
   System.out.println("内部类方法");
   }
   }
   public InnerClass getInstance(){
   inner.y=9;
   return new InnerClass();
   }
  
  public static void main(String args[]){
  OuterClass outer=new OuterClass();
  outer.InnerClass inner=outer.getInstance();
   //outer.InnerClass inner=outer.new InnerClass();
   }
   }
   如果在外部类中定义的成员变量与内部类中的成员变量名称相同,可以用this关键字。
   class Outer{
   int i=0;
   class Inner{
   int i=0;
   public void print(int i){
   i++;  //调用的形参i
   this.i++;  //调用的内部类i
   Outer.this.i++; //调用的外部类i
   }
   }
   }
  
  2.局部内部类
   内部类不仅可以在类中进行定义,也可以在类的局部位置定义,比如方法中。
   interface OuterInterface{}
  
   class Outer{
   public OuterInterface doit(final String x){
   class Inner implements OuterInterface{
   Inner(String s){
   s=x;
   System.out.println(s);
  }
   }
   return new Inner("doit");
   }
   }
   内部类是doit方法的一部分,只能在方法内部访问内部类,但是该内部类可以访问方法的常量
   以及外部类的所有成员。
  
  3.匿名内部类
   将上面代码改写:
   class Outer{
   public OuterInterface doit(){
   return new OuterInterface(){
   private i=0;
   public int getValue(){
   return i;
   }
   };
   }
   }
  
  4.静态内部类
   在内部类前添加static修饰符,该内部类就变为静态内部类。
   静态内部类中可以声明静态成员,非静态内部类中不可以声明静态成员。
   如果创建静态内部类的对象不需要外部类的对象引用。
   不能从静态内部类的对象中访问非静态外部类的对象。
  
   class Outer{
   int i=0;
   static int j=9;
   static class Inner{
   void doit(){
   System.out.println(j);
   }
   }
   }

你可能感兴趣的:(内部类)