在施工期间访问基类字段

时间:2015-07-28 09:15:28

标签: java class

我有以下课程:

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的访问是否可靠?

4 个答案:

答案 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最终版可能是个不错的选择。

相关问题