本帖最后由 李会成 于 2013-2-2 13:55 编辑
在第八天讲多态的时候,有这样一段代码:
- 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的特性吗?
|
|