我遇到了一个设计问题,我不知道如何在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()方法。解决这个问题的正确设计是什么?
答案 0 :(得分:7)
将调用子覆盖 - 但是子构造函数还没有执行,所以除非它被设计为在部分初始化的对象上调用,否则很容易出现问题。最好的方法是不要在构造函数中调用虚方法。只是 是一个问题。你是否掌控了这两门课程?你可以重新设计以避免问题吗?
答案 1 :(得分:2)
将调用孩子a() 。
从构造函数中调用a()的假设不会调用覆盖方法在C ++中是正确的而在Java中是不正确的。事实上,子类字段的初始化不会发生,但语言仍允许覆盖从构造函数调用方法。
[编辑]
显然,你应该小心这些电话,它们通常被认为是一种危险的做法。