如何解决从抽象类中引用实例变量
我有一个抽象类,列出了每个子类应实现的内容。对于每个子类,大多数方法将具有不同的实现,但是对于所有子类,某些方法将是相同的。我希望将在抽象类中定义的方法相同,以便不会将同一方法粘贴到几个不同的类中。但是,当我在抽象的子类的实例上调用该方法时,会收到一个空指针,因为我想,在抽象类中实现的方法将引用抽象的字段,而不是实例的字段。
有人可以指出缺陷在哪里吗?
例如:
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控件字段的两个字符串。我不想要遍历显然存在于抽象中的未初始化数组。
是访问修饰符或静态方法的某种组合使它无法按其应有的方式工作,还是我在抽象类上缺少了一些关键的知识?这似乎是一个基本问题,但是我很难说出来,所以我对搜索的任何结果都不满意。
解决方法
有两个名为controls
的数组。派生类中的一个使基类中的一个模糊,因此基实例永远不会设置为非null。
从派生类中删除声明。
此问题与abstract
的基础无关。如果您在派生类中使用与基类相同的字段名称,则基实例将被遮盖。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。