RT.. 代码如下:class A
{
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();
}
}public class NestingInterfaces
{
public static void main(String[] args)
{
 A.DImp2 di2 = a.getD();
 a.getD().f();
}
}编译时A.DImp2 di2 = a.getD() 和 a.getD().f(); 都会提示出错.书上的解释是:
A.DImp2 只能被当作它自己的类型来用,你不能透露任何"它实现了一个private接口"的信息,
因此实现private按口就成了一种"牵制你去定义那个接口的方法,但是又不让你添加任何类型信息(也就是说不允许上传)"的手段了.但看多遍也不明白. 请指教. 谢谢.

解决方案 »

  1.   

    上面mian方法里漏掉一句:
    A a = new A();
      

  2.   

    private interface D
    ^^^^^^^
    public D getD() 
    ^^^^^^
      

  3.   

    a.getD()生成的是A的内部私有接口,你在外部类中当然不能访问。另外,如果将private interface D改为公共接口的话,对于a.getD()返回的接口来说,需要downcast到public class DImp2:A.DImp2 di2 = (A.DImp2)a.getD();private interface D的私有性牵制public class DImp2只能为A自己所用。
      

  4.   

    public D getD() { return new DImp2(); }=>public DImp2 getD() { return new DImp2(); }
      

  5.   

    这样子可以!
    import javax.swing.*;class A
    {
    public 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();
    }
    }public class Test
    {
    public static void main(String[] args)
    {
    A a = new A(); 
    A.DImp2 di2 = (A.DImp2)a.getD();
    a.getD().f();
    }
    }