package com.lei.duixiang;
/**
* 內部类向上转型为接口
* 1、非内部类不能被声明为 private 或 protected 访问类型
* 2、从执行结果可以看出,这条语句执行的是内部类中的f() 方法
* 很好地对继承该类的子类隐藏了实现细节,仅为编写子类的人留下一个接口和一个外部类
* 同时也可以调用f() 方法,但是 f()方法的具体实现过程却很好的被隐藏了,这是内部类最基本的用途
* @author Administrator
*
*/
interface OutInterface{ //定义一个接口
public void f();
}
public class InterfereInner {
public static void main(String[] args) {
OutClass2 out = new OutClass2(); //实例化一个 OutClass2对象
// 调用 doit() 方法,返回一个 OutInterface 接口
OutInterface outInterface = out.doit();
outInterface.f(); //调用 f() 方法
}
}
class OutClass2{
//定义一个内部类实现 OutInterface接口
private class InnerClass implements OutInterface{
InnerClass(String s){ //构造方法
System.out.println(s);
}
public void f() { //实现接口中的f()方法
System.out.println("访问内部类的 f() 方法");
}
}
public OutInterface doit(){ //定义一个方法,返回值类型为 outInterface 接口
return new InnerClass("访问内部类构造方法");
}
}