通过数组元素访问方法的时候只能访问在 Animal中定义的方法,对

于 Tiger类和  Fish中定义的方法时却不能调用,例如语句  animal[2].swim();就是不正确的。当

需要访问这些方法时需要用到类型转换,演示程序如下。

 1 public class DynamicMethodDemo2{
 2 public static void main(String args[ ]){
 3 Animal [ ]animal=new Animal[3];
 4 animal[0]=new Animal();
 5 animal[1]=new Tiger();
 6 animal[2]=new Fish();
 7 DynamicMethodDemo2 dm=new DynamicMethodDemo2();
 8 dm.move(animal[0]);
 9 dm.move(animal[1]);
10 dm.move(animal[2]);
11 }
12 void move(Animal animal){
13 //进行对象类型的判断
14 if(animal instanceof Tiger)
15 ((Tiger)animal).tigerRun();
16 else if(animal instanceof Fish)
17 ((Fish)animal).swim();
18 else animal.sleep();
19 }
20 }

 

主要看 move方法,move方法首先判断   animal对象是哪个类的对象,由判断执行不同的

方法。在判断过程使用了  instanceof运算符,它是用来判断对象类型的一个运算符。当判断

出它的类型之后,再对其进行类型转换,得到原始类型后就可以调用它的类所特有的方法了。