我正在学习我的java认证,而且我遇到了这段代码。
stateParams
当我跑步时,我得到了#34;猫科动物c c"所以我知道为什么它会在它之后返回猫和美洲狮,但是为什么super.type指的是Cougar对象而不是Feline对象?
我看到了this post,但它并没有真正启发我。
答案 0 :(得分:5)
super.type
只是引用与this.type
相同的变量...只涉及一个对象,因此只有一个字段。
当您创建子类的实例时,它不会创建两个单独的对象,一个用于超类,一个用于子类 - 它创建一个对象,可以将其视为超类或子类。它有一组字段。在这种情况下,您有一个字段(type
),其最初的值为"f "
,但其值已更改为"c "
。
答案 1 :(得分:1)
只有一个type
变量。您的Cougar
go()
方法将其设置为“c”。
因此,this.type
和super.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
。