在第八天讲多态的时候,有这样一段代码:
abstract class Animal
{
public abstract void eat();
}
class Cat extends Animal
{
public void eat()
{
System.out.println("eat fish");
}
public void catchMouse()
{
System.out.println("catch mouse");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("eat bone");
}
public void watchHome()
{
System.out.println("watch home");
}
}
class PolymorphismDemo
{
public static void main(String[] args)
{
function(new Cat());
function(new Dog());
}
public static void function(Animal a)
{
a.eat();
}
}
我的问题:
1.倒数第三行的a.eat()这个a调用的eat()方法为什么是子类的方法,而不是父类的?
2.我百度了下,查到说是引用变量a有2个类型,编译的时候类型为Animal,运行的时候类型为子类,所以在代码编译过程中,a调用的是Animal的eat()方法, 在运行代码的时候调用的是子类的eat()方法,这就是多态,那么我的第一个问题应该这样解释吗?这个方法的调用顺序是java的特性吗? |