我有一个 abstract
父类(super class),它有一个 protected String
变量。它未在父类(super class)中初始化。
我想做的就是初始化并在子类中使用它。所以,我有这样的东西:
public class MySubclass extends MyAbstractSuperclass {
thing = "i'm a thing";
[...]
}
看起来很简单,因为继承的全部意义在于在不同的上下文中重用类及其字段。但这是错误的:token“thing”语法错误,VariableDeclaratorId expected after this token
。
我可以通过在子类初始化两边加上方括号来编译它。我想知道的是为什么第一种方式是错的,为什么用括号修复。感谢您的帮助。
编辑:我很感激我可以通过使用构造函数来解决这个问题的提示。但是,我仍然很好奇以这种方式使用父类(super class)字段到底有什么问题,因为在我看来它非常直观。而且,为什么大括号会修复它,用大括号包围一个语句到底意味着什么?循环结构?
最佳答案
这不是 Scala,你必须写一个明确的构造函数:
public class MySubclass extends MyAbstractSuperclass {
public MySubclass() {
thing = "i'm a thing";
[...]
}
}
或者使用带参数的构造函数:
public abstract class MyAbstractSuperclass {
protected final String thing;
protected MyAbstractSuperclass(String thing) {
this.thing = thing;
}
}
public class MySubclass extends MyAbstractSuperclass {
public MySubclass() {
super("i'm a thing");
}
}
关于java - 在子类中引用抽象父类(super class)字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14695151/