我有一个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通过消息"构造函数中的可覆盖方法调用"警告我,但它应该有什么问题呢?我能想象的唯一选择是将其他抽象方法的结果传递给子类中的超级构造函数.但是很多参数很难读懂.
我得到的NullPointerException代码低于代码.
Parent.java
public abstract class Parent {
public Parent(){
parentFunc();
}
public abstract void parentFunc();
}
Run Code Online (Sandbox Code Playgroud)
Child.java
public class Child extends Parent {
ArrayList<String> list = new ArrayList<String>();
@Override
public void parentFunc() {
list.add("First Item");
}
}
Run Code Online (Sandbox Code Playgroud)
当我创建和实例Child像new Child()我得到NullPointerException
这里是我的控制台输出
Exception in thread "main" java.lang.NullPointerException
at Child.parentFunc(Child.java:8)
at Parent.<init>(Parent.java:5)
at Child.<init>(Child.java:3)
at Main.main(Main.java:8)
Run Code Online (Sandbox Code Playgroud)
我知道因为在父构造函数中调用的Child.parentFunc()而发生异常,但我真的很困惑.所以我想知道发生了什么
什么是创造的顺序;
有一个基类ServerAdapter:
public abstract class ServerAdapter {
public ServerAdapter() {
initGUI();
}
protected abstract void initGUI();
}
Run Code Online (Sandbox Code Playgroud)
还有一个继承的子类ServerAdapter:
public abstract class LinuxServerAdapter extends ServerAdapter {
protected CheckBox key = new CheckBox();
public LinuxServerAdapter() {
super();
}
@Override
public void initGUI() {
//NPE is thrown here, because key = null
key.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
//Something happens here
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
继承LinuxServerAdapter的结束类:
public class MyLinuxServerAdapter extends LinuxServerAdapter {
public MyLinuxServerAdapter() {
super();
} …Run Code Online (Sandbox Code Playgroud)