看板 java 關於我們 聯絡資訊
在講解繼承語法的文章內 都會講到子類別複製了父類別的內容 然後子類別又能去override從父類別複製過來的東西 並新增父類別沒有的東西 然後子類別就is-a父類別 但我不懂的是 既然子類別複製父類別的東西 會去修改它 然後又會增加新的 專屬於自己的東西 那為什麼還可以說子類別is-a父類別 說子類別包含(include)父類別不是比較合理? 介紹相關議題的文章 通常是直接舉例說明 例如父類別是動物 子類別是貓 狗 但總覺得用這樣的例子來說明 有種以偏概全的FU 不知道有沒有更general的解釋? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.230.20.30 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1525352718.A.2F8.html ※ 編輯: lueichun (36.230.20.30), 05/03/2018 21:09:04
yuxds: 我覺得不能說是以偏概全 而是那樣的情況你才會用繼承 05/03 21:32
yuxds: 不會說 我要一台跑車 然後跑車去繼承動物類別再改寫內容 05/03 21:33
這正是我想到的點 如果我今天故意拿跑車繼承動物 那按照語法 就變成跑車is a動物 聽起來就很不合理
yuxds: 我覺得你可以舉個例子 05/03 21:53
yuxds: 怎樣的情況是你會用繼承 然後用子包含父類別是聽起來很順的 05/03 21:53
LPH66: is-a 這個名字會這麼叫就是用英文的 is a 連起來表示關係 05/03 23:54
LPH66: 狗 is a 動物 ← 像是這種關係 05/03 23:55
LPH66: 也就是說動物能做的事狗也能做, 雖然怎麼做可能不盡相同 05/03 23:55
LPH66: 你需要動物做事的地方你可以抓一隻狗來 05/03 23:56
但是如果是我上面舉的跑車繼承動物例子 就很怪了
ssccg: 修改是指改內部的實作,對外的介面是不能變的 05/04 02:30
ssccg: 對外部來說,就可以把子類別的物件當成父類別的物件來用 05/04 02:33
這裡不是很懂 可以再解釋一下「對外的介面是不能變」的意思嗎
ssccg: 子類別的物件就是一個(is-a)父類別的物件 05/04 02:33
ssccg: 物件導向的封裝就是只看公開介面,去想裡面怎麼做的就偏了 05/04 02:37
ssccg: 對compiler或interpreter來說要實作這種設計當然會變成記憶 05/04 02:38
ssccg: 體裡子類別的那份裡面要放一份父類別的東西,但是那不是你 05/04 02:39
ssccg: 時要去擔心的事 05/04 02:42
※ 編輯: lueichun (59.120.148.217), 05/04/2018 09:58:35
pttworld: 那是你取名叫跑車,取名黑豹不就是了 05/04 10:21
pttworld: 另一點因為繼承動物,你的跑車只會有動物的特性 05/04 10:22
pttworld: 不會因為他叫跑車就多了引擎和輪子 05/04 10:23
pttworld: 即使你在跑車類新增引擎輪子,他只是像動物的跑車 05/04 10:24
ssccg: 以你的例子來說,假設跑車繼承動物(用哺乳動物比較單純) 05/04 10:46
ssccg: 這個跑車外顯行為一定有會呼吸、兩性生殖、會哺乳..等 05/04 10:47
ssccg: 繼承了什麼就決定了它是什麼 05/04 10:48
ssccg: 你會說出跑車繼承動物其實觀念就有問題,不是先有兩個類別 05/04 10:48
ssccg: 再去套繼承關係,是先有父類別,子類別一定是其衍生 05/04 10:48
gmoz: 請從用途跟需求出發 05/04 16:04
※ 編輯: lueichun (36.230.19.60), 05/04/2018 21:09:39