您的位置:首页 > 编程语言 > Java开发

《thinking in java》 接口与内部类

2015-03-05 19:08 316 查看
书本上的例子



改编后的。

package test2;

class A{
interface B{void f();}
public class BImp implements B{public void f(){}}
private class BImp2 implements B{public void f(){}}

public interface C{void f();}
class CImp implements C{public void f(){}}
private class CImp2 implements C{public void f(){}}

private interface D{void f();}
private class DImp implements D{public void f(){}}
public class DImp2 implements D{public void f(){}}

public D getD(){return new DImp2();}
private D dRef;
public void receiveD(D d){dRef=d;dRef.f();}

}
interface E{
interface G{void f();}

public interface H{void f();}
void g();
}
public class NestingInterfaces {

public class BImp implements A.B{public void f(){}}
class CImp implements A.C{public void f(){}}

//    The type A.D is not visible
//    class DImp implements A.D{public void f(){}}

class EImp implements E{public void g(){}}
class EGimp implements E.G{public void f(){}}

class EImp2 implements E{
public void g(){}
class EG implements E.G{public void f(){}}
}

public static void main(String[] args) {
A a=new A();

//编译器在A.D处报错:The type A.D is not visible
//        A.D ad=a.getD();

//编译器在 a.getD() 处报错:Type mismatch: cannot convert from A.D to A.DImp2
//        A.DImp2 di2=a.getD();

A.DImp2 di2=(A.DImp2)a.getD();
System.out.println(di2.getClass().getName());//test2.A$DImp2

//The type A.D is not visible
//        a.getD().f();

((A.DImp2)a.getD()).f();

A a2=new A();
a2.receiveD(a.getD());
}

}


可以顺利运行。

PS:编译器识别代码总是从左到右,从上到下,一步步进行的。至于代码的运行逻辑,那是识别之后的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: