java - 初始化时继承的类变量会覆盖父级设置的自己的值
问题描述
我的应用程序中有这样的内容:
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() 函数。
解决方案
您的问题是super()
调用父构造函数,该构造函数调用 init()。然后在调用strName = "";
之后在子类构造函数中运行该语句。super()
strName
protected
如果你想这样设置它应该是父类中的一个变量。否则,您应该咬紧牙关并在调用之后在构造函数中手动初始化它,super();
这是最安全和最可预测的方法。
推荐阅读
- asp.net-mvc - 如何使用强类型视图处理 Asp.NET MVC 中的不同帖子源
- c# - 如何获取我在 SQL Server 中拥有的所有弹性池的名称?
- r - k-means 分析:如何将数据转换为数值?
- r - 使用 st_rasterize 时如何在数据框中捕获数据?
- python - Django ORM:如何在 values_list 方法中使用 count 方法?
- tensorflow - 是否可以仅从 keras 中保存的模型文件中加载权重?
- pandas - PIP3 - 如何减少构建轮子所需的时间
? - r - 最小化 R 中的成本
- apache-nifi - NIFI 自定义处理器错误 - 无法上传模板
- angular - Rollbar 人员跟踪 Angular 7