我的问题具体涉及 Java、抽象类和受保护数据的使用。有人告诉我,所有数据都应该是私有的,并且只使用受保护的 getter/setter。
现在,我知道我们希望保护数据免受班级临时用户的直接操纵,而公共数据成员通常是一种有问题的做法。我看过“Java protected fields vs public getters”(Java protected fields vs public getters),但我仍然怀疑:
protected int i;
在抽象类中比:
private int i;
protected int geti();
protected void seti(int j);
当抽象类恰好为子类提供父/公共设施时,我只是没有看到不利的一面,而受保护的范围旨在提供对子类的访问,同时保护临时用户的数据。我在上面提到的问题中注意到,大多数答案似乎都解决了为什么数据通常应该是私有的而不是公共的问题。我试图将我的问题专门集中在一个抽象父级中供孩子们使用的数据上。迄今为止我听到的唯一合理的评论是,使用父级受保护的数据(例如,上面的 int i)会给您留下子类中引用未在子类中声明的变量的代码。这个论点不太引人注目(请参阅基类中的通用受保护数据成员?) 您可能希望有一天更改访问权限,现在您必须尊重您的界面。这是一个抽象类,旨在 100% 的时间进行扩展。
谢谢!对书籍的特定标题/页码引用比对“..任何基本 Java 编程文本...”的引用更有帮助
============================================ 10-13-2010
这既是关于抽象类的问题,也是关于受保护数据的问题。令人失望的是,焦点似乎已经转移到对数据隐藏在 OOP 中是否是一件好事的回应上(答案:是的)。这里有很多深度涉及抽象类的性质,它与常规的非最终类有何不同,以及在抽象父类中固定数据项的名称和类型以供使用可能有什么优势孩子们的班级。我认为这里有可能将创新和更大的控制从抽象父类扩展到实现子类。我担心一般原则,例如数据隐藏的优势,会成为教条,抑制创新以及新模式和新思想的发展。
感谢所有做出贡献的人。