有类继承或接口实现、子类重写父类的方法、父类引用指向子类的对象。比如:
犬科动物{吠();
}
狗 继承 犬科动物{
吠(){旺旺旺}
}
狼 继承 犬科动物{
吠(){嗷嗷嗷}
}
狗和狼都是犬科动物,拉来一直犬科动物,如果它你叫的话,你可能没办法直接分辨出他到底是狼还是狗。只要他真正的叫出来的时候,你才知道。这就是运行时多态。转化成Java代码如下:
public class Canidae{public void bark();
}
public class Dog extends Canidae{
public void bark(){
System.out.print("旺旺旺....");
}
}
public class Wolf extends Canidae{
public void bark(){
System.out.print("嗷嗷嗷....");
}
}
public class Main(){
Canidae canidae = new Dog();
canidae.bark();
Canidae canidae1 = new Wolf();
canidae1.bark();
}
这样,就实现了多态,同样是Canidae的实例,canidae.bark调用的就是Dog类的方法,而canidae1.bark();调用的却是Wolf的方法。
有人说,你自己定义的对象,定义的时候不就知道canidae到底是什么类的对象了么,这个其实并不决定的,很多时候我们可能不知道,原因是,对象可能并不是我们自己new出来的,比如Spring的IOC。
奥,那我终于知道什么是面向对象编程了。