Java 内部类详解( 二 )

 
static 定义内部类(静态内部类)使用static定义内部类,此时的内部类不再受外部类实例化对象的影响,所以等同于于一个“外部类”,内部类的名称为“外部类.内部类”,同时static定义的内部类只能调用外部类中static定义的结构,并且在进行内部类的实例化时也不再需要先获取外部类实例化对象,static内部类对象实例化格式如下:
外部类内部类内部类对象外部类内部类
 package neibu; public class Lian {  public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(); Outer.Intter inttera = new Outer.Intter("guoqun"); inttera.name(); } } class Outer{ public Outer(int age) { super(); this.age = age; }  public Intter getInfo() { Intter inter = new Intter("guoqun"); return inter ; }  private int age ; static class Intter{ private String name ; public Intter(String name) { super(); this.name = name; }  public void name() { System.out.println(this.name);  } } }使用static 定义内部接口(静态内部类) package neibu; public class Lian {  public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(); JieKou.Load load = new LoadFace(); JieKou.Compare compare = new CompareFace(); JieKou.getInfo(load, compare); }  }  interface JieKou{ // 内部接口 static interface Load { public abstract boolean loadData();  }      static interface Compare { public abstract void compareData();  }      public static void getInfo(Load sLoad , Compare sCompare) { if (sLoad.loadData()) { Compare.compareData(); } else { System.out.println("加载失败"); } } }  class LoadFace implements JieKou.Load{ public boolean loadData() { return true; } }  class CompareFace implements JieKou.Compare{ public void  compareData() { System.out.println("compareData"); } } 方法中定义内部类(局部类) package neibu;  public class Lian {  public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(); Outer outer = new Outer(12); outer.getInfo(); }  }   class Outer{ private int  age ; public Outer(int age ) { this.age = age ; } public void   getInfo() { class Inter {  // 内部类  public void interFun() { System.out.println("interFun" + Outer.this.age) ; } } new Inter().interFun() ;  } }【Java 内部类详解】如果一个类只在某个方法中使用,则可以考虑使用局部类 。
匿名内部类,函数式接口匿名内部类使用广泛,如我们常用的绑定监听的时候 。
 package neibu; public class Lian { public static void main(String[] args) {         /*         接口对象无法直接实例化,使用匿名内部类后就可以利用对象的实例化格式获取接口实例         */ Face face  = new Face() { // 匿名内部类 @Override public void name() { // TODO Auto-generated method stub System.out.println("sss"); } }; }  }  @FunctionalInterface interface Face { public abstract void name();  }在接口中利用匿名内部类实现接口 package neibu; public class Lian { public static void main(String[] args) { FaceN.getFace().name(); }  } interface FaceN { public abstract void name(); public static FaceN getFace() { return new FaceN() { @Override public void name() { System.out.println("在接口中利用匿名内部类实现接口");  } }; }  }适合于接口只有一个子类的时候,并且也可以对外部调用处隐含子类 。




推荐阅读