考虑以下代码段。
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
类访问顶级类的私有(private)成员来增加封装(有时您可能需要这样做)。 a
是 A
类的私有(private)成员,在 BreakOOP 的范围内
,这反过来又使其可以在 B
类中访问。
关于java - 打破Java中的封装和信息隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39723973/