java - 打破Java中的封装和信息隐藏

标签 java oop inheritance encapsulation information-hiding

考虑以下代码段。

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 类访问顶级类的私有(private)成员来增加封装(有时您可能需要这样做)。 aA 类的私有(private)成员,在 BreakOOP 的范围内,这反过来又使其可以在 B 类中访问。

关于java - 打破Java中的封装和信息隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39723973/

相关文章:

java - Apache Camel 不在源文件夹中保留文件

java - 定义 JOptionPane 的大小和位置

java - 在java中访问JSONObject的键的有效方法

objective-c - 为什么在 Objective-C 中一切都是指针

java - ArrayList<X> 是聚合还是组合?

java - 在我的 servlet 中使用 this.variable 访问全局变量的目的是什么?

c++ - 在 C++ 中查找内存中某个类的对象布局的算法

c++ - 提高 std::vector 的存储容量/性能

java字符串替换和内存

c++ - 来自 C++/Stroustrup : converting to protected base class 的 dynamic_cast 疑问