在Java中,为什么不能在父类中声明最终成员(不进行初始化),并在子类中设置其值?我该如何解决?

汉诺·菲茨(Hanno Fietz):

在Java程序中,我有多个从父类(抽象的)继承的子类。我想表达的是,每个孩子都应该有一个仅设置一次的成员(我打算从构造函数中进行设置)。我的计划是编写代码。像这样:

public abstract class Parent {
    protected final String birthmark;
}

public class Child extends Parent {
    public Child(String s) {
        this.birthmark = s;
    }
}

但是,这似乎并不能取悦Java之神。在父类中,我收到消息birthmark“可能尚未初始化”,在子类中,我得到“ birthmark无法访问最终字段”。

那么Java的处理方式是什么?我想念什么?

亚当·罗森菲尔德(Adam Rosenfield):

您无法执行此操作,因为在比较父类时,编译器无法确定子类会对其进行初始化。您必须在父级的构造函数中对其进行初始化,然后让子级调用父级的构造函数:

public abstract class Parent {
    protected final String birthmark;
    protected Parent(String s) {
        birthmark = s;
    }
}

public class Child extends Parent {
    public Child(String s) {
        super(s);
        ...
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章