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