考虑以下情况:
public class A {
public A() { b = new B(); }
B b;
private class B { }
}
Run Code Online (Sandbox Code Playgroud)
从Eclipse中的警告我引用:java complier通过合成访问器方法模拟构造函数AB().我想编译器现在继续为B创建一个额外的"水下"构造函数.
我觉得这很奇怪:为什么B级不能作为A中的ako场可见?并且:这是否意味着B类在运行时不再是私有的?并且:为什么表示B类的受保护关键字不同?
public class A {
public A() { b = new B(); }
B b;
protected class B { }
}
Run Code Online (Sandbox Code Playgroud) 在以下代码中.我们有一个类TestInners,一个内部类 A,一个方法局部内部类A和一个外A级.
new A().m();输出
中间一样.在代码中.为什么输出中间?首先是对内部类的偏好吗?那么外类呢?我很困惑.
class A { void m() { System.out.println("outer"); } }
public class TestInners {
public static void main(String[] args) {
new TestInners().go();
}
void go() {
new A().m();
class A { void m() { System.out.println("inner"); } }
}
class A { void m() { System.out.println("middle"); } }
}
Run Code Online (Sandbox Code Playgroud)