接口不能为private的,默认是public的

解决方案 »

  1.   

    to 楼上:接口中的成员只能是public ,但接口在其它类(或接口)中定义时接口本身可以是private
      

  2.   

    private interface D{
                    void f() ;
            }
    就是这个private的问题。
    a.getD() 正确是因为public D getD(),这里是公有的。
    它返回了一个DImp2,虽然DImp2是公有的,但是它的偏偏它的接口是私有的,正好f()又是这个私有接口定义的,所以报错。这个私有接口在class AAA的范围内才有效。而你是在范围外使用的。如果改一下,
    public interfaces D { void f(); }
    private class DImp2 implements D{
       public void f(){}
    }
    就是把DImp2改成私有的,这反而是可以的。因为这个类尽管是私有的,但是它是在class AAA的范围内创建的,外部引用它的公有方法,这当然就不成问题了。
      

  3.   

    zengpan_panpan 正解!有一点不明白,xyjbn(无聊也是一种错)为什么要这么狠? 
      

  4.   

    a.getD().f(); //这行错误的原因是:a.getD() 返回的是一个D类型的对象,其实在方法中
    public D getD(){
        return new DImp2();
    }
    系统进行了上溯造型,把DImp2类型的对象造型成一个D类型的对象,而你定义的
    private interface D{
        void f();
    }
    又是私有类型,所以造成AAA.D不可见,这个问题主要是访问控制的错误。