这个你protected访问权限有关系,用他定义的方法或者类,只能被他所在的包,或他的子类所在的包调用。

解决方案 »

  1.   

    这个问题真的很有意思,我特意调试了一下,发现了存在问题的地方
    inner class C4 的权限是protected,说明它在被继承时是可见的,
    这没有什么可说的,如果C4不是inner class的话,编译是完全通过的。
    问题在return ic.new C4();这一句,在这里我们调用了C4的default constructor,但它的权限却是default,那就意味着除了package2以外
    都无法调用该constructor,解决方法很简单,就是声明C4()为public
    或是protected,这样就可见了。你同意我的说法吗?
      

  2.   

    改成public是一种方法,另一种方法是把package都去掉,或者让所有的类都在同一个package里。
      

  3.   

    The problem comes from 《thinking in java》chapter8,exercise12,which requires packages and a protected inner class.I turn B4.java into:package package2;
    import package1.*;public class B4 {
      protected class C4 implements A4 {
    public C4() {}
    public void a4() { System.out.println("a4()"); }
      }
    }
    and E12_InnerClass.java into:package package2;
    import package1.*;public class E02_Interface implements A {
      public void A1() { System.out.println("A1()"); }
      public void A2() { System.out.println("A2()"); }
      public void A3() { System.out.println("A3()"); }
      public static void main(String[] args) {
        E02_Interface i=new E02_Interface();
    i.A1();
    i.A2();
    i.A3();
      }
    }
    and then the compiler doesn't complain.