当用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类中的方法。