你先理解下什么是多態(tài)勋磕,最基本的多態(tài),我給你舉個例子:
有一個類叫做Animal敢靡,也就是代表一個動物的類挂滓,Animal類里有一個函數(shù) tweet(),tweet的意思是鳴叫啸胧;也就是我們在調用Animal的這個函數(shù)時赶站,可以達到讓“某種動物鳴叫”的效果。
但是不同的動物“鳴叫的聲音”是不同的纺念,所以我們?yōu)榱藢崿F(xiàn)不同動物不同的叫聲贝椿,會繼承Animal實現(xiàn)新的具體動物的子類,比如說Dog和Cat陷谱,在具體動物的類里去實現(xiàn)自己的 tweet() 鳴叫的方式烙博,從而達到如下目的:我們在調用不同動物(Dog和Cat)的 tweet() 函數(shù)時,會有不同的效果烟逊,比如調用Dog的tweet()我們會聽到狗叫渣窜,調用Cat的tweet()我們會聽到貓叫∠芮看下面的代碼乔宿。
(如果你不懂子類父類的概念,你就想想Animal和Dog眷唉,Cat的例子予颤,Animal是父類,因為Dog和Cat都是Animal的其中一種冬阳,Animal有所有動物的共性蛤虐,二Dog和Cat都是具體化的一種動物,有他們自己的特性肝陪,所以他們是子類驳庭。)
// 父類
abstract class Animal {
void tweet();
}
// 狗,繼承了Animal
class Dog extends Animal {
void tweet() {
"實現(xiàn)了狗叫的行為"
}
}
// 貓氯窍,繼承了Animal
class Cat extends Animal {
void tweet() {
"實現(xiàn)了貓叫的行為"
}
}
//我們現(xiàn)在創(chuàng)建一只狗和一只貓饲常,分別讓他們叫。
Animal dog = new Dog();
dog.tweet();
Animal cat = new Cat();
cat.tweet();
}
上面的代碼狼讨,我們通過Cat類和Dog類都繼承了抽象的Animal類贝淤,并且分別實現(xiàn)了自己的自己的tweet()函數(shù),就讓Dog和Cat這兩種可以“鳴叫”的Animal有了自己獨有的鳴叫方式政供。這個時候我們通過創(chuàng)建Dog和Cat兩種類型的Animal播聪,再調用他們的tweet方法朽基,會分別聽到“貓叫”和“狗叫”。
這就是多態(tài)离陶,通過在不同的子類對同一個函數(shù)的不同實現(xiàn)稼虎,來控制不同子類自己特殊的行為,也就是在這里舉例子的“鳴叫”招刨。
下面來解釋你ppt上的三種多態(tài):
1霎俩、Subtype polymorphism(子類多態(tài))
其實這個就是我剛才舉的例子,最常用的多態(tài)沉眶,就是在子類里根據(jù)自己的特性實現(xiàn)同一個父類方法打却,來達到不同的效果。
2沦寂、parametric polymorphism(參數(shù)化多態(tài)学密,也就是C++中的模板和Java中的泛型)
這里只能舉例子來說明,看下面代碼传藏。
T add(T a, T b) {
return a+b;
}
上面的add函數(shù),實現(xiàn)了a和b相加的功能彤守,T可以在程序運行時代表任何類型
的變量毯侦,看下面的例子:
double result = add<double>(6.666, 9.999);
int result = add<int>(6, 9);
*** PS:上面兩行代碼,尖括號<>中的類型(double或int)具垫,是為了指定上述代碼中的‘T’ ***
第一條代碼侈离,可以得到6.666和9.999相加的結果,因為這個結果是double類型(小數(shù))筝蚕,所以上面那段含有“T”的代碼會判斷出來需要返回給你一個double(小數(shù))的值卦碾。
同理,第二條代碼運行的時候起宽,上面那段含有“T”的代碼會判斷出來需要返回給你一個int(整數(shù))的值洲胖。
也就是說,通過T來指代類型坯沪,可以讓這段代碼同時具有計算整數(shù)和小數(shù)相加的功能绿映,并且返回相應類型的值。
具體到代碼來看腐晾,當我們指定T為double時候叉弦,上面的代碼會被解析成:
double add(double a, double b) {
return a+b;
}
而當我們指定T為int時,上面的代碼會被解析成:
int add(int a, int b) {
return a+b;
}
3藻糖、Ad-hoc polymorphism(非參數(shù)化多態(tài)淹冰,最簡單的就是函數(shù)重載)
參考這篇文章的1、2部分就好了:http://blog.csdn.net/lf_2016/article/details/51769789