low*_*all 1 java inheritance android constructor parent
我的应用程序中有这样的内容:
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";
}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建 B 类的实例。该应用程序正在运行以下命令:
1- 构造函数 B,调用 super
2- 构造函数 A,调用 init() 函数
3- B 中覆盖的 Init() 将“Hello”分配给 strName 变量
4-然后B类中的属性被初始化,当前值“Hello”被初始化值“”覆盖;
如果我想在父级调用 init() 等许多子级中的通用方法,这是正确的结构。避免在每个孩子身上重复。并避免我遇到的问题。或者,父级中的 init() 函数应该在 super 下的子构造函数中调用。
这里的问题是super()调用父构造函数,它调用 init()。该strName = "";语句然后在super()调用后在子类构造函数中运行。
strNameprotected如果你想这样设置它应该是父类中的一个变量。否则,您应该硬着头皮在调用后在构造函数中手动初始化它。super();这是最安全和最可预测的方法。
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |