Java - 包含变量的抽象类?

时间:2008-10-25 10:37:35

标签: java class variables abstract

让抽象类定义实例变量是不错的做法?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}

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

你有什么建议?

/亚当

3 个答案:

答案 0 :(得分:31)

我会认为这样的事情要好得多,因为你要添加一个变量,为什么不限制访问并使其更清晰?你的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方法没有获取和设置,请将其描述为其他方法。

始终考虑你的班级是否真的是一个不同的东西,这应该有助于决定你是否还需要其他东西。

答案 1 :(得分:7)

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

答案 2 :(得分:1)

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