“数据封装”是什么意思?使用私人数据字段或方法?
问题描述:
说我有一个ClassA
和ClassB
延伸ClassA
“数据封装”是什么意思?使用私人数据字段或方法?
ClassA {
private int x;
private void m1()
{
}
}
ClassB extends ClassA {
}
在数据封装,要把私有数据字段和方法。那是对的吗?
但是,在这种情况下,ClassB
不能使用ClassA
的数据字段和方法。
那么,在数据封装下我应该只使用私有访问修饰符?
我可以使用受保护的访问修饰符而不是私有来解决数据封装规则下的问题吗?
答
没有规定所有的方法都需要是私有的。
数据封装通常是指隐藏客户端类的实现细节。它通常不涉及隐藏所有方法,因为这些是类和该类的客户端类(和/或子类)之间的公共(或在某些情况下是继承的)契约。私有方法通常用作公共方法的助手,并且保持私有方式,因为它们的功能—或许它们的存在 基于实现的细节。
有时某些实现的细节已发布供子类使用。这是受保护方法的主要用途。执行数据有时也可能以这种方式暴露出来,但那是—我该怎么说呢? —皱起了眉头。尽管如此,在严格遵守封装理念和编程的实用性之间有一个折衷。
答
本质上来说,封装是一种确保某个类中的某些功能仅由被测试和已知可以正常工作的进程运行的方法。如果一个函数没有理由被除了你打算的对象以外的其他对象调用,为什么它应该被赋予被看到和意外调用的能力?
它实际上更多是一种程序员控件的形式,为正确的代码使用设置规则和基本指导,特别是在只想暴露某些函数或类的API场景中。
“良好实践”声明,您应该使用“私人”来使用除类别本身以外的其他任何接口的函数。对于需要与子类进行交互的函数,可以使用protected。对于其他类之间的所有其他接口,请使用public。