如何覆盖父构造函数中使用的方法?

时间:2010-01-13 11:14:09

标签: java

我遇到了一个设计问题,我不知道如何在java中克服。我想覆盖从父构造函数调用的方法。这是一个非常简单的问题示例:

public class Parent {
    public Parent(){
        a();
    }

    public void a() {
        // CODE
        return;
    }
}

public class Child extends Parent {
    public Child() {
       super();
    }

    public void a() {
       super.a();
       // MORE CODE
       return;
    }
}

我知道在构造父类之前不会初始化子类,因此不会调用子类a()方法。解决这个问题的正确设计是什么?

2 个答案:

答案 0 :(得分:7)

将调用子覆盖 - 但是子构造函数还没有执行,所以除非它被设计为在部分初始化的对象上调用,否则很容易出现问题。最好的方法是不要在构造函数中调用虚方法。只是 是一个问题。你是否掌控了这两门课程?你可以重新设计以避免问题吗?

答案 1 :(得分:2)

将调用孩子a()

从构造函数中调用a()的假设不会调用覆盖方法在C ++中是正确的而在Java中是不正确的。事实上,子类字段的初始化不会发生,但语言仍允许覆盖从构造函数调用方法。

[编辑]

显然,你应该小心这些电话,它们通常被认为是一种危险的做法。