繁体   English   中英

Java抽象类:受保护的字段或公共集/获取方法

[英]Java abstract class: protected fields or public set/get methods

如果我有一个抽象类,我打算从中创建子类,那么更好的做法是让抽象类中的字段受到保护,或者让子类使用setter和getters吗? 有利有弊吗?

例如:

public abstract class MyAbstractClass {
    // option A
    protected int myProtectedInt;

    // option B
    private int myPrivateInt;
    public void setMyPrivateInt() {}
    public int getMyPrivateInt() {}
}

public class MySubClass extends MyAbstractClass {
    // etc
}

嗯,这部分是主观的(取决于场景)和部分偏好。 我个人从来没有打开田地甚至是儿童班。 在过去,优先考虑受保护(或公共,根据需要)的私人领域的getter和setter帮助了我很多。 虽然它为代码增加了一些字符,并使代码看起来不那么直观,但我可以列出一些我喜欢的方法的优点,可能会说服你开始使用私有字段的getter / setter:

  1. 更好的控制:父类确切地知道改变了什么以及访问了什么。 他们必须使用setter,而不是直接修改字段的子类(或大孩子),为父类提供可能在某一天可能派上用场的可见性

  2. 更好的灵活性:只要保留了getter / setter的签名,父类就可以灵活地改变字段的维护方式,可能计算甚至重构,而不会影响任何子类。

  3. 记录,数据访问和验证:getter / setter方法可以具有编程逻辑,用于在访问或修改之前或之后记录或检查数据类型或执行验证。 您可以添加业务逻辑以确保调用者有权读取或写入字段。

  4. 更好的描述:方法可以更好地记录(JavaDocs的方法可以比成员变量的更多解释)

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM