方法的多态的三要素(属性没有多态):
要有重写,要有继承(父类),父类引用指向子类对象。
class cat extends Animal{
public void voice(
System.out.println(" 喵喵");
)
}
public void main testAnimalVoice( Animal c){
c.voice();
}
Animal a = new cat;
Animal b = new pig;
testAnimalVoice(a);
引用时一般为父类对象,为编译时类型,相对模糊。
子类对象相对具体,为运行时类型。
程序的最终状态只有在执行过程中被决定,而非是在编译过程中就被决定的。
调用子类中的其他方法时,因为现在a是 Animal 类,所以没办法直接调用,需要使用强制转型:
Cat a2 = (Cat) a;
a2.CatchMouse();