在子类中使用super来打印超类字段

时间:2013-07-20 10:54:51

标签: java super

我运行了以下代码:

class Feline {
    public String type = "f ";

    public Feline() {
        System.out.print("feline ");
    }
}

public class Cougar extends Feline {
    public Cougar() {
        System.out.print("cougar ");
    }

    public static void main(String[] args) {
        new Cougar().go();
    }

    void go() {
        type = "c ";
        System.out.print(this.type + super.type);
    }
}

并认为输出为feline cougar c f,但令我惊讶的是输出结果为feline cougar c c。 有人可以解释一下。

3 个答案:

答案 0 :(得分:4)

超类不是子类实例具有的东西,它是子类实例 的东西。您的Cougar“是”FelineFeline的所有成员都是Cougar的成员 - 相同的成员,而不是副本。超类中没有单独的type - 它与子类中的type成员相同。您可以将其称为Cougar的成员或Feline的成员,它们都是相同的。

答案 1 :(得分:2)

当然 - 每type个实例只有一个 Cougar个变量。它由FelineCougar中声明,Feline继承。无论你在哪里更改该变量的值,它都会在任何地方都可见(对于那个对象)。

因此,如果您在type中有另一种方法打印了c的当前值,那么也会打印go()(在您调用{{1}}之后)。

答案 2 :(得分:1)

您尚未在子类中编码字段:

public class Cougar extends Feline {

    public String type = "c ";

    // ...
}