java - "Data Encapsulation"是什么意思?使用私有(private)数据字段或方法?

标签 java oop encapsulation

假设我有一个 ClassAClassB 扩展 ClassA

ClassA {
    private int x;

    private void m1()
    {

    }
}

ClassB extends ClassA {

}

在数据封装下,我们应该将数据字段和方法私有(private)化。这是正确的吗?

但是,在这种情况下,ClassB 无法使用 ClassA 的数据字段和方法。

那么,在数据封装下我应该只使用私有(private)访问修饰符吗?

我可以使用protected访问修饰符而不是private来解决数据封装规则下的问题吗?

最佳答案

本质上,封装是一种确保类中的某些函数仅由经过测试且已知可以工作的进程运行的方法。如果一个函数没有理由被除您想要的对象之外的任何对象调用,那么为什么要赋予它被看到和意外调用的能力?

它实际上更像是一种程序员控制形式,设置正确代码使用的规则和基本准则,特别是在您只想公开某些函数或类的 API 场景中。

“良好实践”指出,对于不与类本身以外的任何对象交互的函数,您应该使用“私有(private)”。对于需要与子类交互的函数,可以使用 protected。对于其他类之间的所有其他接口(interface),请使用 public。

关于java - "Data Encapsulation"是什么意思?使用私有(private)数据字段或方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208802/

相关文章:

c# - 将 JSON 对象反序列化为嵌套的 C# 对象

c# - 关于封装的概念

java - Spring 无法使用空键返回 JSON 响应

java - 如何从不同的类访问变量

oop - 在类本身或类的构造函数中分配变量更好吗?

oop - 在 UML 中使用动词来描述类之间的关系是惯例吗?

c# - 使用属性在 C# 中封装数据

Java:封装库的自动方式

Java - 双缓冲NullPointerException

java - 如果我在实现工厂模式时使用抽象类而不是接口(interface)。还会是工厂模式吗?