首页 > 解决方案 > 初始化时继承的类变量会覆盖父级设置的自己的值

问题描述

我的应用程序中有这样的内容:

public abstract class A {

    public A (){
        init();
    }
    
    protected abstract void init();
}

public class B extends A {

    private String strName = "";

    public B (){
        super();
    }
    
    @Override
    protected void init(){
        strName = "Hello";
    }
}

我正在创建 B 类的一个实例。应用程序正在运行这个命令:

1-构造函数B,调用super

2- 构造函数 A,调用 init() 函数

3- B 中重写的 Init() 将“Hello”分配给 strName 变量

4- 然后初始化B类中的属性,当前值“Hello”被初始化值“”覆盖;

如果我想在许多孩子中使用像 init() 这样的通用方法,在父级中调用,那么这是正确的结构。避免在每个孩子身上重复。并避免我遇到的问题。或者也许应该在父级下面的子构造函数中调用父级中的 init() 函数。

标签: javaandroidinheritanceconstructorparent

解决方案


您的问题是super()调用父构造函数,该构造函数调用 init()。然后在调用strName = "";之后在子类构造函数中运行该语句。super()

strNameprotected如果你想这样设置它应该是父类中的一个变量。否则,您应该咬紧牙关并在调用之后在构造函数中手动初始化它,super();这是最安全和最可预测的方法。


推荐阅读