试图理解super()行为

时间:2015-12-23 08:32:38

标签: java

我正在学习我的java认证,而且我遇到了这段代码。

stateParams

当我跑步时,我得到了#34;猫科动物c c"所以我知道为什么它会在它之后返回猫和美洲狮,但是为什么super.type指的是Cougar对象而不是Feline对象?

我看到了this post,但它并没有真正启发我。

4 个答案:

答案 0 :(得分:5)

super.type只是引用与this.type相同的变量...只涉及一个对象,因此只有一个字段。

当您创建子类的实例时,它不会创建两个单独的对象,一个用于超类,一个用于子类 - 它创建一个对象,可以将其视为超类或子类。它有一组字段。在这种情况下,您有一个字段(type),其最初的值为"f ",但其值已更改为"c "

答案 1 :(得分:1)

只有一个type变量。您的Cougar go()方法将其设置为“c”。 因此,this.typesuper.type都会打印c

答案 2 :(得分:1)

这 - >调用当前类:Cougar 超>召唤猫 猫是美洲狮的超级阶级,因为Cougar继承了猫科动物。如果你想在Cougar中使用Feline类字段,你应该使用super。

您可以看到:http://www.instanceofjava.com/2015/03/this-vs-super-keywords.html

答案 3 :(得分:1)

我想在此处再补充一点以获得完整性

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

此构造函数由编译器翻译为

    public Cougar() {
        super(); // Added by compiler if not added explicitly by programmer
        System.out.print("cougar "); 
    }

这就是为什么先输出feline然后输出cougar的原因。 除此之外,其他答案中只解释了一个type变量,因此它们都会打印c