当子类调用父类方法时,为什么要打印父类变量



当用Rabbit类对象调用showName()时,它调用从Animal类继承的showName()并打印Animal类名变量。

class Animal{ 
String name="animal";

void showName() {  
System.out.println(this.name);
}
}
class Rabbit extends Animal {
String name="rabbit";
}

public class Main
{
public static void main(String[] args) {
Animal a = new Animal();
a.showName();
Rabbit r = new Rabbit();
r.showName();
}
}

输出:动物动物

当您在类的实例上调用方法时,Java将首先尝试在子类中查找该方法,如果找不到,它将尝试在超类中查找。

在您的代码中,当您调用r.showName()时,它将首先在Rabbit类中检查该方法,由于在那里找不到它,它将检查超类Animal。它在Animal中找到它,所以它运行在那里找到的方法。

如果你想让r.showName()说rabbit,你必须重写rabbit类中的方法。

最新更新