有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

抽象类中受java保护的数据

我的问题特别涉及Java、抽象类和受保护数据的使用。我被告知所有数据都应该是私有的,并且只使用受保护的getter/setter

现在,我了解到我们想要保护数据不被该类的临时用户直接操纵,而公共数据成员通常是一种值得怀疑的做法。我已经看过了“Java保护字段与公共getter”(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中是否是一件好事的回应上(回答:是的)。这里有很多深度涉及抽象类的性质,它与常规非最终类的区别,以及修复抽象父类中供子类使用的数据项的名称和类型可能有哪些优势。我认为创新和更大的控制可能从抽象父类扩展到实现子类。我担心一般原则,如数据隐藏的优势,可能会成为教条,阻碍创新和新模式和新思想的发展

感谢所有做出贡献的人


共 (6) 个答案

  1. # 1 楼答案

    更少的访问不是缺点,而是好处。类应该总是尽可能多地限制对其内部状态的访问。不要想为什么内部应该隐藏,而是想为什么应该暴露。在这种情况下,就像在所有情况下一样,除非有充分的理由公开变量,否则不要公开它

  2. # 2 楼答案

    如果你不需要你的孩子直接访问它,你为什么要让他们访问

    使用protected并不是不好的一面。但如果没有必要,也许最好避免它,并控制对字段的访问

  3. # 3 楼答案

    如果有人对您的类进行子类化,并将该子类与您当前的类放在同一个包中,他们可能希望覆盖您的getter和setter。例如,他们希望确保i只能设置为大于1的值

    除此之外,这真的取决于你。传统的做法是,每件事都有成功者和成功者

  4. # 4 楼答案

    将受保护的方法视为子类的接口,就像公共方法是其他所有人的接口一样

    提供访问器使基类能够维护其状态:如果没有故意的欺骗,子类是不可能损坏它的

  5. # 5 楼答案

    在Java中,除了任何扩展类之外,同一个包中的所有成员都可以访问受保护的成员。将字段设置为私有将防止同一包中的类直接访问它

    还有一点是亚历克斯早些时候提出的

  6. # 6 楼答案

    如果该字段是私有的,并且通过getter和setter进行访问,那么您将能够重新实现getter和setter(例如,删除该字段并从外部源更新/读取值),从而在不涉及任何子类的情况下更改“字段”的工作方式

    这是否值得,取决于你