教女朋友學編程之 --- 多態(tài)

你先理解下什么是多態(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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末巨柒,一起剝皮案震驚了整個濱河市樱拴,隨后出現(xiàn)的幾起案子柠衍,更是在濱河造成了極大的恐慌,老刑警劉巖疹鳄,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拧略,死亡現(xiàn)場離奇詭異,居然都是意外死亡瘪弓,警方通過查閱死者的電腦和手機垫蛆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腺怯,“玉大人袱饭,你說我怎么就攤上這事∏赫迹” “怎么了虑乖?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長晾虑。 經(jīng)常有香客問我疹味,道長,這世上最難降的妖魔是什么帜篇? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任糙捺,我火速辦了婚禮,結果婚禮上笙隙,老公的妹妹穿的比我還像新娘洪灯。我一直安慰自己,他們只是感情好竟痰,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布签钩。 她就那樣靜靜地躺著,像睡著了一般坏快。 火紅的嫁衣襯著肌膚如雪铅檩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天假消,我揣著相機與錄音柠并,去河邊找鬼。 笑死富拗,一個胖子當著我的面吹牛臼予,可吹牛的內容都是我干的。 我是一名探鬼主播啃沪,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼粘拾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了创千?” 一聲冷哼從身側響起缰雇,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤入偷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后械哟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疏之,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年暇咆,在試婚紗的時候發(fā)現(xiàn)自己被綠了锋爪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡爸业,死狀恐怖其骄,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情扯旷,我是刑警寧澤拯爽,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站钧忽,受9級特大地震影響毯炮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜耸黑,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一否副、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崎坊,春花似錦、人聲如沸洲拇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赋续。三九已至男翰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纽乱,已是汗流浹背蛾绎。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸦列,地道東北人租冠。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像薯嗤,于是被迫代替她去往敵國和親顽爹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 2014年的蘋果全球開發(fā)者大會(WWDC)骆姐,當Craig Federighi向全世界宣布“We have new ...
    yeshenlong520閱讀 2,267評論 0 9
  • 程序在運行的過程中镜粤,根據(jù)傳遞的參數(shù)的不同捏题,執(zhí)行不同的函數(shù)或者操作不同的代碼,這種在運行過程中才確定調用的方式成為運...
    云Shen不知處閱讀 400評論 0 0
  • 一.成員變量與局部變量的區(qū)別 成員變量:在類中定義肉渴,用來描述對象將要有什么(屬性)公荧。可被本類方法和其他跟當前類有關...
    jeffierw閱讀 540評論 0 0
  • 在OOP程序設計中同规,當我們定義一個class的時候循狰,可以從某個現(xiàn)有的class繼承,新的class稱為子類(Sub...
    chen_000閱讀 242評論 1 1
  • 1.面向對象三大特性 -封裝性 -繼承性 -多態(tài)性 2.什么是封裝 封裝性就是隱藏實現(xiàn)細節(jié),僅對外公開接口昧识。 3....
    夢夜繁星閱讀 1,082評論 0 6