让抽象类定义实例变量是个好习惯吗?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}

然后,子类ExternalJavaScript.class会自动获取源变量,但我觉得如果所有子类本身都定义源而不是继承,那么阅读代码会更容易。

你有什么建议?

/亚当

有帮助吗?

解决方案

我本以为这样的东西会更好,因为您添加了一个变量,那么为什么不限制访问并使其更干净呢?你的 getter/setter 应该按照他们在锡上所说的去做。

public abstract class ExternalScript extends Script {

private String source;

public void setSource(String file) {
    source = file;
}

public String getSource() {
    return source;
}

回到问题上来,你在阅读时是否费心去查看 getter/setter 代码在哪里?如果它们都进行获取和设置,那么您在阅读代码时无需担心函数“做什么”。还有其他一些原因需要考虑:

  • 如果源代码受到保护(可以通过子类访问),那么代码就会变得混乱:谁在改变变量?当它是一个对象时,当您需要重构时就会变得很困难,而方法往往会使这一步变得更容易。
  • 如果您的 getter/setter 方法没有获取和设置,则将它们描述为其他内容。

始终思考你的课程是否真的与众不同,这应该有助于决定你是否需要更多。

其他提示

当然..为什么不呢?
为了提高存储和维护效率,抽象基类只是为了容纳两个或多个类共同的容纳行为和数据的便利。它是一个实现细节。
但请注意,您没有使用应该使用接口的抽象基类。请参阅接口与基类

当然。抽象类的整个想法是它们可以包含一些您需要包含所有子类的行为或数据。想想WheeledVehicle的简单例子 - 它应该有一个numWheels成员变量。您希望所有子类都具有此变量。请记住,抽象类在开发API时非常有用,因为它们可以确保扩展API的人不会破坏它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top