从抽象 class 中引用实例变量
Referencing instance variables from within abstract class
我有一个摘要 class,它列出了每个子 class 应该实现的内容。大多数方法对每个子 class 都有不同的实现,但有些方法对所有子都是相同的。我希望在摘要 class 中定义相同的方法,这样我就不会将相同的方法粘贴到多个不同的 class 中。但是,当我在抽象的 subclass 的实例上调用该方法时,我收到一个空指针,因为我想,在抽象 class 中实现的方法正在引用抽象的字段,而不是实例的字段.
谁能指出漏洞在哪里?
例如:
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 的控件字段时放入的两个字符串。我不想迭代显然存在于抽象中的未初始化数组。
是访问修饰符或静态方法的某种组合使它无法正常工作,还是我错过了一些关于抽象 classes 的关键知识?这感觉像是一个基本问题,但我很难用语言表达,所以我对搜索的任何结果都不满意。
有两个名为 controls
的数组。派生 class 中的那个遮盖了基础 class 中的那个,因此基础实例永远不会设置 non-null.
删除派生的声明class。
此问题与基础 abstract
无关。如果您在派生 class 中使用与在基础 class 中使用的字段名称相同的字段名称,基础实例将被隐藏。
我有一个摘要 class,它列出了每个子 class 应该实现的内容。大多数方法对每个子 class 都有不同的实现,但有些方法对所有子都是相同的。我希望在摘要 class 中定义相同的方法,这样我就不会将相同的方法粘贴到多个不同的 class 中。但是,当我在抽象的 subclass 的实例上调用该方法时,我收到一个空指针,因为我想,在抽象 class 中实现的方法正在引用抽象的字段,而不是实例的字段.
谁能指出漏洞在哪里?
例如:
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 的控件字段时放入的两个字符串。我不想迭代显然存在于抽象中的未初始化数组。
是访问修饰符或静态方法的某种组合使它无法正常工作,还是我错过了一些关于抽象 classes 的关键知识?这感觉像是一个基本问题,但我很难用语言表达,所以我对搜索的任何结果都不满意。
有两个名为 controls
的数组。派生 class 中的那个遮盖了基础 class 中的那个,因此基础实例永远不会设置 non-null.
删除派生的声明class。
此问题与基础 abstract
无关。如果您在派生 class 中使用与在基础 class 中使用的字段名称相同的字段名称,基础实例将被隐藏。