代码之家  ›  专栏  ›  技术社区  ›  eliocs

如何重写父构造函数中使用的方法?

  •  4
  • eliocs  · 技术社区  · 15 年前

    我有一个设计问题,我不知道如何用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;
        }
    }
    

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

    2 回复  |  直到 15 年前
        1
  •  7
  •   Jon Skeet    15 年前

    将调用子重写-但子构造函数还没有执行,因此,除非它设计为在部分初始化的对象上调用,否则很容易出现问题。最好的方法是 不调用构造函数中的虚拟方法 . 它只是 一个问题。你能控制这两个班吗?你能重新设计一开始就避免这个问题吗?

        2
  •  2
  •   Itay Maman    15 年前

    孩子a()) 被召唤。

    您假设从构造函数调用“())不会调用重写方法在C++中是正确的,而不是在Java中。实际上,子类字段的初始化不会发生,但语言仍然允许从构造函数调用方法时进行重写。

    [编辑]

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