你用的jdk版本多少?
那本书写了N年了,很多规则可能会和目前有所不同的
所以他是否犯了错误不是重点
如果你对这个知识点有兴趣,可以在网上搜索一下相关资料
说实话看think in Java 或Effective Java等书,重要的还是开阔自己的思路
吸取别人的思想和经验才是最重要的,语法和语义这种细节网上搜索一下就是一堆
那本书写了N年了,很多规则可能会和目前有所不同的
所以他是否犯了错误不是重点
如果你对这个知识点有兴趣,可以在网上搜索一下相关资料
说实话看think in Java 或Effective Java等书,重要的还是开阔自己的思路
吸取别人的思想和经验才是最重要的,语法和语义这种细节网上搜索一下就是一堆
而你的A.DImp2 aa = a.new DImp2();实际上是在class A内为DImp2创建一个对象!而不是在外界!
这句语句说明DImp2的对象是通过class A内的getD()方法来执行的!而getD()对于DImp2来说属于外界了!所以这句语句是不能执行的!
正如上面的A.DImp2 aa = a.new DImp2();这句是通过a.new DImp2();直接为DImp2创建对象,没有通过外界的某个函数来new一个DImp2对象!
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());
}
} ///:~