如果我打算从中创建子类,那么最好是对抽象类中的字段进行保护,或者让子类使用setter和getter代替呢?有什么利弊吗?
例如:
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的签名即可。
记录,数据访问和验证:getter / setter方法可以具有编程逻辑来记录或检查数据类型,或者在访问或修改之前或之后执行验证。您可能可以添加业务逻辑,以确保呼叫者有权访问或写入字段。
更好的描述:方法可以更好地记录(方法的JavaDocs可以比成员变量具有更多的解释性)
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句