我有以下课程:
public class Base{
private String str;
public Base(String str){
this.str = str;
}
public String getStr(){
return str;
}
}
public class Derived extends Base{
public Derived(){
super("String");
System.out.prinln(getStr()); //Is it reliable?
}
}
在构造派生类期间获取对基类intance的访问是否可靠?
答案 0 :(得分:6)
str
成员在调用super("String")
时已初始化,因此可以在以后立即使用它。
答案 1 :(得分:1)
super()用于调用父类构造函数。
答案 2 :(得分:1)
这在java中完全有效。如果您希望超级完全安全,可以添加super.
运算符,如下所示:
public Derived(){
super("String");
System.out.println(super.getStr()); //Is it reliable? Yes!
}
这样你就可以确定它是超级getStr()
方法而不是其他类/库。
答案 3 :(得分:1)
在给定的例子中它是安全的,但我不会对它感到满意。如果有人将Derived
子类化并覆盖getStr
,则会发生以下情况:
package src;
public class Derived2 extends Derived {
public Derived2() {
}
@Override public String getStr() {
return null;
}
public static void main(String[] args) {
new Derived2();
}
}
制作getStr
最终版可能是个不错的选择。