相关疑难解决方法(0)

构造函数中的可覆盖方法调用有什么问题?

我有一个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通过消息"构造函数中的可覆盖方法调用"警告我,但它应该有什么问题呢?我能想象的唯一选择是将其他抽象方法的结果传递给子类中的超级构造函数.但是很多参数很难读懂.

java oop inheritance constructor overriding

366
推荐指数
4
解决办法
12万
查看次数

扩展父类时出现Java NullPointerException

我得到的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)

当我创建和实例Childnew 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()而发生异常,但我真的很困惑.所以我想知道发生了什么

什么是创造的顺序;

  1. 创建列表变量时
  2. 当构造函数被调用时
  3. 在函数创建和调用时,在构造函数中调用它们

java inheritance

5
推荐指数
1
解决办法
4807
查看次数

如果在类初始化期间调用重写的基本方法,则实例字段不会初始化

有一个基类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)

java

1
推荐指数
1
解决办法
93
查看次数

标签 统计

java ×3

inheritance ×2

constructor ×1

oop ×1

overriding ×1