我运行了以下代码:

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
有人可以解释一下。

最佳答案

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

10-06 10:12