【发布时间】:2021-01-28 07:32:50
【问题描述】:
我有一个抽象类,它列出了它的每个子类应该实现的内容。大多数方法对每个子类都有不同的实现,但有些方法对所有子类都是相同的。我希望在抽象类中定义相同的方法,这样我就不会将相同的方法粘贴到几个不同的类中。但是,当我在抽象子类的实例上调用该方法时,我收到了一个空指针,因为我想抽象类中实现的方法是引用抽象的字段,而不是实例的字段。
谁能指出缺陷在哪里?
例如:
abstract class ControlView {
String[] controls;
abstract void render();
void release() {
for (int i = 0; i <= controls.length; i++) {
//Release the controls
}
}
}
class StartingControls extends ControlView{
String[] controls;
Button uiDrawButton;
Button uiLoadButton;
StartingControls() {
this.controls = new String[2];
uiDrawButton = new Button();
this.controls[0] = uiDrawButton;
uiLoadButton = new Button();
this.controls[1] = uiLoadButton;
}
public void render() {
//Unique Render implementation
}
}
当我打电话时
instanceOfStartingControls.release();
我显然想遍历我在instanceOfStartingControls 的控件字段中构造时放入的两个字符串。我不想要遍历显然存在于抽象中的未初始化数组。
是访问修饰符或静态方法的某种组合使其无法正常工作,还是我错过了一些关于抽象类的关键知识?这感觉像是一个基本问题,但我很难用语言表达,所以我对搜索的任何结果都不满意。
【问题讨论】:
-
不要在你的子类中重新声明
String[] controls;。它已经有一个名为controls的字段。它不需要另一个。 -
同时制作控件
private并添加protected子类与之交互的方法。 -
@SephB 这没必要。
-
@khelwood 不,不是。不过,如果
controls的实现在未来发生变化,它确实会有所帮助。比如它变成了一个列表。
标签: java oop abstract-class