Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java抽象类是否包含变量?_Java_Class_Variables_Abstract - Fatal编程技术网

Java抽象类是否包含变量?

Java抽象类是否包含变量?,java,class,variables,abstract,Java,Class,Variables,Abstract,让抽象类定义实例变量是一种好的做法吗 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 {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}
子类ExternalJavaScript.class将自动获取源变量,但我觉得如果所有子类都自己定义源代码,而不是从继承中定义源代码,那么读取代码就更容易了

你有什么建议

/亚当

当然。。为什么不呢?
抽象基类只是为了方便在一个地方存放2个或更多类的公共行为和数据,以提高存储和维护的效率。这是一个实施细节。

但是,请注意不要在应该使用接口的地方使用抽象基类。参考

我认为这样会更好,因为您添加了一个变量,那么为什么不限制访问并使其更干净呢?你的能手/二传手应该按照他们在锡罐上说的去做

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的人不会破坏它