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

时间:2015-11-13 03:22:38

标签: java oop

如果我有一个抽象类,我打算从中创建子类,那么更好的做法是让抽象类中的字段受到保护,或者让子类使用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
}

1 个答案:

答案 0 :(得分:3)

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

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

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

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

  4. 更好的描述:方法可以更好地记录(方法的JavaDocs可以比成员变量更加明确)

  5. 希望这有帮助。