假设我有一个ClassA,ClassB扩展了ClassA
ClassA {
private int x;
private void m1()
{
}
}
ClassB extends ClassA {
}在数据封装下,我们应该私有数据字段和方法。对吗?
但是,在这种情况下,ClassB不能使用ClassA的数据字段和方法。
那么,在数据封装下,我应该只使用私有访问修饰符吗?
在数据封装规则下,是否可以使用保护访问修饰符而不是私有访问修饰符来解决此问题?
发布于 2011-03-06 13:21:21
从本质上讲,封装是一种确保类中的某些函数仅由经过测试且已知工作的进程运行的方法。如果一个函数没有理由被您想要的对象以外的任何对象调用,为什么要赋予它被看到和意外调用的能力?
它实际上更像是一种程序员控件的形式,设置正确使用代码的规则和基本指导原则,特别是在只想公开某些函数或类的API场景中。
“良好的实践”指出,对于除了类本身之外不与任何东西交互的函数,您应该使用“private”。对于需要与子类接口的函数,可以使用protected。对于其他类之间的所有其他接口,请使用public。
发布于 2011-03-06 13:14:24
没有规定所有方法都必须是私有的。
数据封装通常是指对客户端类隐藏实现的细节。它通常不涉及隐藏所有方法,因为这些方法是类和该类的客户机类(和/或子类)之间的公共(或,在某些情况下,继承的)契约。私有方法通常被用作公共方法的帮助器,并且是私有的,因为它们的函数-也许它们的存在-基于实现的细节。
有时会发布实现的某些细节,以供子类使用。这是受保护方法的主要用途。实现数据有时也会以这种方式暴露出来,但这是--我该怎么说呢?--不太赞成。尽管如此,在严格遵守封装的理想和编程的实用性之间还是需要权衡的。
https://stackoverflow.com/questions/5208802
复制相似问题