Java 内部类详解( 二 )

使用static 定义内部接口(静态内部类) package neibu; public class Lian {public static void main(String[] args) {// TODO Auto-generated method stubSystem.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 voidcompareData() {System.out.println("compareData");} } 方法中定义内部类(局部类) package neibu;public class Lian {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println();Outer outer = new Outer(12);outer.getInfo();}}class Outer{private intage ;public Outer(int age ) {this.age = age ;}public voidgetInfo() {class Inter {// 内部类public void interFun() {System.out.println("interFun" + Outer.this.age) ;}}new Inter().interFun() ;} }如果一个类只在某个方法中使用 , 则可以考虑使用局部类 。
匿名内部类 , 函数式接口匿名内部类使用广泛 , 如我们常用的绑定监听的时候 。
package neibu; public class Lian {public static void main(String[] args) {/*接口对象无法直接实例化 , 使用匿名内部类后就可以利用对象的实例化格式获取接口实例*/Face face= new Face() { // 匿名内部类@Overridepublic void name() {// TODO Auto-generated method stubSystem.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() {@Overridepublic void name() {System.out.println("在接口中利用匿名内部类实现接口");}};}}适合于接口只有一个子类的时候 , 并且也可以对外部调用处隐含子类 。