[問題] is-a的意義

作者: lueichun (no anonymous)   2018-05-03 21:05:15
在講解繼承語法的文章內
都會講到子類別複製了父類別的內容
然後子類別又能去override從父類別複製過來的東西 並新增父類別沒有的東西
然後子類別就is-a父類別
但我不懂的是
既然子類別複製父類別的東西 會去修改它
然後又會增加新的 專屬於自己的東西
那為什麼還可以說子類別is-a父類別
說子類別包含(include)父類別不是比較合理?
介紹相關議題的文章 通常是直接舉例說明
例如父類別是動物 子類別是貓 狗
但總覺得用這樣的例子來說明 有種以偏概全的FU
不知道有沒有更general的解釋?
作者: yuxds (cody)   2018-05-03 21:32:00
我覺得不能說是以偏概全 而是那樣的情況你才會用繼承不會說 我要一台跑車 然後跑車去繼承動物類別再改寫內容我覺得你可以舉個例子怎樣的情況是你會用繼承 然後用子包含父類別是聽起來很順的
作者: LPH66 (-6.2598534e+18f)   2018-05-03 23:54:00
is-a 這個名字會這麼叫就是用英文的 is a 連起來表示關係狗 is a 動物 ← 像是這種關係也就是說動物能做的事狗也能做, 雖然怎麼做可能不盡相同你需要動物做事的地方你可以抓一隻狗來
作者: ssccg (23)   2018-05-04 02:30:00
修改是指改內部的實作,對外的介面是不能變的對外部來說,就可以把子類別的物件當成父類別的物件來用子類別的物件就是一個(is-a)父類別的物件物件導向的封裝就是只看公開介面,去想裡面怎麼做的就偏了對compiler或interpreter來說要實作這種設計當然會變成記憶體裡子類別的那份裡面要放一份父類別的東西,但是那不是你時要去擔心的事
作者: pttworld (批踢踢世界)   2018-05-04 10:21:00
那是你取名叫跑車,取名黑豹不就是了另一點因為繼承動物,你的跑車只會有動物的特性不會因為他叫跑車就多了引擎和輪子即使你在跑車類新增引擎輪子,他只是像動物的跑車
作者: ssccg (23)   2018-05-04 10:46:00
以你的例子來說,假設跑車繼承動物(用哺乳動物比較單純)這個跑車外顯行為一定有會呼吸、兩性生殖、會哺乳..等繼承了什麼就決定了它是什麼你會說出跑車繼承動物其實觀念就有問題,不是先有兩個類別再去套繼承關係,是先有父類別,子類別一定是其衍生
作者: gmoz ( This can't do that. )   2018-05-04 16:04:00
請從用途跟需求出發

Links booklink

Contact Us: admin [ a t ] ucptt.com