考虑以下代码段。

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());
    }
}

仅当AB封装在BreakOOP类中时,该示例才编译。

这似乎与OOP的一些基本概念背道而驰。有人可以解释为什么编译吗?它背后的原因是什么?

最佳答案

检查此:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html。它说通过允许 static 类访问顶级类的私有成员(有时可能需要这样做)来增加封装。 a A 类的私有成员,该类属于 BreakOOP 的范围,这又使得它可以在 B 类内访问。

09-16 06:03