我在net beans中尝试了以下代码我期待错误,但我没有收到任何错误
class B {
private void method() {
}
public static void main() {
B b = new B();
B c = new C();
b.method();
c.method();
}
}
class C extends B {
}
当c.method()
尝试访问该方法时,它应该显示错误,但在NetBeans中它没有显示。请告诉我这是什么错误。
答案 0 :(得分:6)
您定义方法的方式是从C.method()
内部调用B.main()
。由于方法对B
是私有的,因此该方法在B.main()内部是可见的,即使该对象的类型为C
,它继承自B
。
答案 1 :(得分:3)
访问检查不是在对象/类级别完成,而是在 范围 级别完成。您可以在B
的可访问范围内调用该方法。无论您是在C
对象还是B
对象上调用它都无关紧要。
答案 2 :(得分:2)
这是因为main
方法在类B
中声明,并且可以看到所有B
个私有方法。
执行c.method()
时,IDE知道C extends B
并知道main
在B
内,因此它可以看到私有方法(引用{{1} }})。
这是您在编译的B
类(来自Eclipse)上找到的“注册表”。
B