内部类

一。内部类中的一些简单调用与关系
public class InnerClass {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        InnerClass ic=new InnerClass();
        InnerClass.inner in=ic.new inner(); // 先创建外部对象之后  才能创建内部类 ;内部类的类型是 outClassName.InnerClassName 
        in.say();
 }
  class inner{
    public  InnerClass getOut(){
     return InnerClass.this;   // 返回外部类对象的引用
    }
    public void  say(){
     System.out.println("hello world");
    }
  }
}
二。方法中写内部类

 
public class InnerClass {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  InnerClass in=new InnerClass();
     in.getInnner("hello world!");
 }
    public void getInnner(final String s){   // 如果内部类中某个变量需要外部类的方法或变量的值,则外部的这个变量须为final类型
     class inner{   // 改inner 类只能在该方法中调用,因此他的访问权限很低
      public void say(){
       System.out.println(s);
      }
     }
     inner i=new inner();  //方法内部的类可以在类的外面new对象
     i.say();
    }
 
}
三。匿名内部类

return  new parent{

    private int  a;

    ............

}

 

相当于   class xx extends paranet {private int a ; .......... }    

     return new parent;

四。静态内部类

      public class InnerClass {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
     getInner();
 }
 /*
  * 静态内部类
  */
   public static class inner{
  public void say(){
   System.out.println("hello world!");
  }
   }
   /*
    * 通过方法直接返回内部内
    */
   public static inner getInner(){
    return new inner(); // 静态内部类可以直接new的到对象,而非内部的不行
   }
}

内部类的主要应用

  每个内部类都能独立的继承自一个接口的实现,所以无论外围类是否已经继承了某个接口的实现 对于内部类都没有影响

 多个接口时,可以使用两种方式:使用单一类,或者使用内部类

 这样单一类或者内部类都能实现,如果拥有的是抽象的类或者具体的类,而不是接口,那就只能使用内部类才能实现多重继承

class  A

abstract class B

 

class  C extends A{

  public B getB(){

    return  new B(){};

}

}

 

public class x{

  static void  makeA(A a){}

  static void  makeB(B b){}

public static viod main(String[] args){

 C c =new C();

makeA(c;)

makeB(c.getB());

}

}

你可能感兴趣的:(C++,c,C#)