1.含義:
同一個操作作用于不同的對象上面逝段,可以產(chǎn)生不同的解釋和不同的執(zhí)行結(jié)果稠肘,
2.例子
1).最普通的"多態(tài)"
var makeSound = function(animal){
if(animal instance of Duck){
console.log("duck duck...")
}else if(animal instance of Chicken){
console.log("chicken chicken...")
}
};
var Duck = function(){};
var Chicken = function(){};
makeSound( new Duck() );
makeSound( new Chicken() );
2).對象的多態(tài)性
var makeSound = function( animal ){
animal.sound();
}
var Duck = function(){}
Duck.prototype.sound = function(){
console.log("duck duck...");
}
var Chicken = function(){}
Chicken.prototype.sound = function(){
console.log("chicken chicken...")
}
makeSound( new Duck() );
makeSound( new Chicken() );
3.多態(tài)與繼承的關(guān)系
因為js與oc這些是動態(tài)語言城舞,不必要進(jìn)行類型檢查抖坪。但如果想java這些靜態(tài)語言亿柑,makeSound方法的入?yún)⒕捅仨氈付ㄗ兞款愋汀K灾付╠uck的時候肮柜,傳入chicken會報錯陷舅。這個使用就需要使用繼承得到多態(tài)效果。
public abstract class Animal{
abstract void makeSound(); //抽象方法
}
public class Chicken extends Animal{
public void makeSound(){
System.out.println(chicken chicken...);
}
}
public class Duck extends Animal{
public void makeSound(){
System.out.println(duck duck...);
}
}
public class AnimalSound{
public void makeSound( Animal animal ){
animal.makeSound();
}
}
public class Test{
public static void main(String args[]){
AnimalSound animalSound = new AnimalSound();
Animal duck = new Duck();
Animal chicken = new Chicken();
animalSound.makeSound(duck);
animalSound.makeSound(chicken);
}
}