你用的jdk版本多少?
那本书写了N年了,很多规则可能会和目前有所不同的
所以他是否犯了错误不是重点
如果你对这个知识点有兴趣,可以在网上搜索一下相关资料
说实话看think in Java 或Effective Java等书,重要的还是开阔自己的思路
吸取别人的思想和经验才是最重要的,语法和语义这种细节网上搜索一下就是一堆

解决方案 »

  1.   

    因为DImp2属于class A的内隐类!
    而你的A.DImp2 aa = a.new DImp2();实际上是在class A内为DImp2创建一个对象!而不是在外界!
      

  2.   

    你的程序的最后位置有这样一句://! A.DImp2 di2 = a.getD();  // incompatible types
    这句语句说明DImp2的对象是通过class A内的getD()方法来执行的!而getD()对于DImp2来说属于外界了!所以这句语句是不能执行的!
    正如上面的A.DImp2 aa = a.new DImp2();这句是通过a.new DImp2();直接为DImp2创建对象,没有通过外界的某个函数来new一个DImp2对象!
      

  3.   

    我在 class A中增加一个私有成员变量 i 但是在main中的
    System.out.println(a.i);   为什么就因i 是a对象中的私有变量而不能调用呢,我为什么不可以说我用a调用的是自己的私有变量呢?
    class A {
      interface B {
        void f();
      }
      public class BImp implements B {
        public void f() {}
      }
      
      private int i=1;     ///////////////////////在此为class A中增加一个私有成员变量 i   private class BImp2 implements B {
        public void f() {}
      }
      public interface C {   //为什么可以为public?
        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() {
         System.out.println("jyh");
         }
      }
      public D getD() { return new DImp2(); }
      
      private D dRef;
      
      public void receiveD(D d) { 
        dRef = d; 
        dRef.f();
      }
      
    }interface E {
      interface G {
        void f();
      }
      // Redundant "public":
      public interface H {
        void f();
      }
      void g();
      // Cannot be private within an interface:
      //! private interface I {}
    }public class NestingInterfaces {
      public class BImp implements A.B {
        public void f() {}
      }
      class CImp implements A.C {
        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();
        System.out.println(a.i);   //但是在此处为什么不能通过a对象来调用i呢?
        A a2 = new A();
        a2.receiveD(a.getD());
      }
    } ///:~