考虑以下代码段。
package breakoop;
public class BreakOOP {
public static class A{
private int a;
}
public static class B extends A{
public int f(){
return super.a;
}
}
public static void main(String[] args) {
B b = new B();
System.out.println(b.f());
}
}
仅当
A
和B
封装在BreakOOP
类中时,该示例才编译。这似乎与OOP的一些基本概念背道而驰。有人可以解释为什么编译吗?它背后的原因是什么?
最佳答案
检查此:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html。它说通过允许 static
类访问顶级类的私有成员(有时可能需要这样做)来增加封装。 a
是 A
类的私有成员,该类属于 BreakOOP
的范围,这又使得它可以在 B
类内访问。