让抽象类定义实例变量是一种好习惯吗?
public abstract class ExternalScript extends Script { String source; public abstract void setSource(String file); public abstract String getSource(); }
然后子类ExternalJavaScript.class将自动获取源变量,但是如果所有子类本身都定义了源代码而不是继承,我觉得读代码更容易.
你有什么建议?
/亚当
我会认为这样的事情要好得多,因为你要添加一个变量,为什么不限制访问并使其更清晰呢?你的吸气剂/安装者应该按照他们对锡的说法做.
public abstract class ExternalScript extends Script { private String source; public void setSource(String file) { source = file; } public String getSource() { return source; } }
回过头来回答这个问题,你是否曾经在阅读它时看看getter/setter代码的位置?如果他们都进行了设置,那么在阅读代码时你不需要担心函数的功能.还有一些其他原因需要考虑:
如果source受到保护(子类可以访问),那么代码就会变得混乱:谁在改变变量?当它是一个对象时,当你需要重构时它变得很难,而一种方法往往会使这一步更容易.
如果你的getter/setter方法没有获取和设置,那么将它们描述为其他方法.
总是想想你的班级是否真的是一个不同的东西,这应该有助于决定你是否还需要其他东西.
当然..为什么不呢?
为了提高存储和维护效率,抽象基类只是为了容纳两个或多个类共同的容纳行为和数据的便利.它是一个实现细节.
但请注意,您没有使用应该使用接口的抽象基类.请参阅Interface vs Base类