我有一个Wicket页面类,它根据抽象方法的结果设置页面标题.
public abstract class BasicPage extends WebPage {
public BasicPage() {
add(new Label("title", getTitle()));
}
protected abstract String getTitle();
}
Run Code Online (Sandbox Code Playgroud)
NetBeans通过消息"构造函数中的可覆盖方法调用"警告我,但它应该有什么问题呢?我能想象的唯一选择是将其他抽象方法的结果传递给子类中的超级构造函数.但是很多参数很难读懂.
我有一堂这样的课:
public abstract class A {
public static final int FIELD;
// some methods
}
Run Code Online (Sandbox Code Playgroud)
我想在子类中初始化变量FIELD。我的意思是这样的:
public class B extends A {
FIELD = 5;
}
Run Code Online (Sandbox Code Playgroud)
编辑 实际上我有多个扩展 A 的类,它们都有变量 FIELD 但具有不同的值;所以我发现的方法是重构变量FIELD并在超类中声明它。还有其他解决方案吗?有可能有这样的东西吗?感谢您的帮助。
我有一个类似于Java的问题,为什么我不能在父类中声明一个最终成员(没有初始化它)并在子类中设置它的值?我该如何解决?但这需要不同的解决方案.在上面的例子中,我想在超类中声明一个变量为Final,但我希望子类为它赋值.是什么让我的问题变得不同,我不希望传递给子类的值,我希望子类"知道"它的值,所以上面的解决方案对我不起作用.然后我试着这样做:
public class Superclass{
public final int x;
public Superclass(int x){
this.x = x;
}
}
public class Subclass extends Superclass{
public Subclass(){
x = 1;
super(x);
}
}
Run Code Online (Sandbox Code Playgroud)
...哪些不起作用(对super()的调用必须在第一行:/).但这基本上就是我想要的行为.有没有办法做到这一点?谢谢!
为什么不允许从子类构造函数设置受保护的最终字段?
例:
class A {
protected final boolean b;
protected A() {
b = false;
}
}
class B extends A {
public B() {
super();
b = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为在某些情况下会有意义,不是吗?
java ×4
constructor ×2
final ×2
inheritance ×2
subclass ×2
constants ×1
oop ×1
overriding ×1
protected ×1
static ×1
variables ×1