如何解决初始化时继承的类变量将覆盖父级设置的自身值
我的应用程序中包含以下内容:
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,称为上级
2-构造函数A,调用init()函数
3-在B中覆盖的Init()正在为strName变量分配“ Hello”
4-然后初始化类B中的属性,并用初始化值“”覆盖当前值“ Hello”;
如果我希望像init()这样的许多子类中的通用方法在父级中被调用,哪种结构是正确的?避免在每个孩子中重复。并避免出现我遇到的问题。或者也许应该在父类的子构造函数中调用父函数中的init()函数。
解决方法
您的问题是super()
调用了父构造函数,后者调用了init()。 strName = "";
调用之后,super()
语句然后在子类构造函数中运行。
strName
,请在父类中将其作为protected
变量。否则,您应该咬住子弹并在调用super();
之后在构造函数中手动对其进行初始化,这是最安全,最可预测的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。