我有很多隻筆(鉛筆、圓珠筆),但是我聲明一個類「筆」作為各種筆的父類有什麼意義呢?
用的時候仍然是要用子類的成員函數來完成我所需要的各種功能,何必多此一舉呢?

使得說用戶在寫字的時候,只需要調用類似這樣的函數:
void draw(Image img, const Pen pen, const Stroke stroke);
其中img是這個畫布,pen是筆的特質,而stroke是我們要畫的點的序列。
如果不用多態,可能我們對於每種類型的筆都要實現一個draw函數。假如你有個叫筆袋的容器,你就能把這些繼承於父類『』筆『』的那圓珠筆,鉛筆都裝進去了,而不需要特地找一個xx筆袋。
嗯,機智的樓主肯定發現了,這個過程就叫做裝筆。
因為有時候你只想用"筆"來"寫",而不用管使用的是什麼筆,你只需要告訴秘書你需要一隻筆,他拿給你的筆是毛筆,鉛筆還是其他的東西,那都不重要。
(為啥上面一堆這麼奇怪的回答,不就是為了多態嗎。。)
這可以讓你只學一次「寫」這個動作。而不是每個筆都重新學一遍。
假如你是一個會拿筆寫字的機器人,不管你給它什麼筆,他都能用筆在紙上寫字(筆這個基類提供的介面),但是寫出來的字的樣式是不一樣的(粗細或者質感……)。
作為一個稱職的機器人,它根本不用知道手裡拿的是什麼筆,他只管在紙上劃拉就成了(通過筆類提供的介面)。
筆這個基類的作用之一就是,當有人發明了新的筆之後,我不用改機器人的代碼,就能讓機器人用那根全新的筆。當你是一個碼農,當你碼代碼的時候想要偷懶的時候,就會覺得有意義了。不想偷懶的碼農不是一個合格的碼農!!!!
就畫圖程序為例,父類筆實現畫圖方法draw,子類筆只需實現不同筆的paint,畫出圖案是draw方法完成,粗細,顏色,質地等paint方法完善,這樣子類沒必要去實現draw
用什麼筆都寫不出兩個一字,這是抽象的關鍵
人可以用筆寫字是吧?然後你就可以在人的類里定義一個變數表示它正拿的筆,這個變數的類型可以是筆 而不能是毛筆 鉛筆之類的.人寫字的時候就可以讓他拿著的那個筆寫了.
想用什麼筆,給他就可以了.
題主寫一個會寫字的人的類就明白了因為有人可能就想知道筆的質量。
如果我們要用這些不同的筆做同樣的操作,需要告訴編譯器,他們是類似的、相關的。所以,聲明這個基類的意義,只是為了因為某些程序設計語言要求,要用這種方式表示這些筆在哪些方面相似。不過,在支持duck typing的語言里,就不需要了……
「寫字()」 這個方法不用寫在每個其他子類(鉛筆,鋼筆,毛筆)里了,
明天要買雙鞋,但我不知道會買皮鞋還是休閑鞋還是運動鞋,但只要能穿就行^_^,所以需要的是一雙鞋,買了之後都能穿就行,系不系鞋帶,這取決於哪種鞋,需不需要擦鞋油那也是以後的事。
面向對象思維在生活中有好多栗子這個栗子舉的真好,我常年用動物舉例,哺乳類,鳥類。你突然來了個我很很多筆,我都不知道怎麼分子類了。好吧,你牛逼,你有很多「筆」
反正那麼多人回家了,我就不說了,我連個筆都沒有。對於寫字的人來說,可能只關注「寫字」這個動作。
但不同的寫字的原理和方法是不一樣的,應該把這種多樣性封裝在每種筆的內部,而暴漏給客戶端「一致性」,就是「多態」。
而且筆雖然工作原理不一樣,但是還有很多一樣的東西,你也不想把這些東西在每個子類里都寫一遍吧。。
回答這個問題真的。。。不管有多少筆,有些筆的功能是公共的,這些公共的功能可以放在父類裡面。另外,作為筆的使用者,使用不同筆的方法也大同小異,所以在父類裡面可以有一個公共的使用介面。
就父類「筆」了就可以把各種筆塞到一個箱子裡面了。
推薦閱讀:
※為何少部分語言如C++和python要堅持引入多繼承?
※Smalltalk 的 Live Programming 是怎樣實現的?
※面向對象在數值計算中如何應用,有哪些具體例子,相較普通函數能夠多大程度提高計算效率?
※面向對象(一)|面向對象概念及優點(以py為例)
※MATLAB高級數據結構連載5: table 2
