[問題] is-a的意義

看板java作者 (no anonymous)時間6年前 (2018/05/03 21:05), 6年前編輯推噓3(3022)
留言25則, 5人參與, 6年前最新討論串1/2 (看更多)
在講解繼承語法的文章內 都會講到子類別複製了父類別的內容 然後子類別又能去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

05/03 21:32, 6年前 , 1F
我覺得不能說是以偏概全 而是那樣的情況你才會用繼承
05/03 21:32, 1F

05/03 21:33, 6年前 , 2F
不會說 我要一台跑車 然後跑車去繼承動物類別再改寫內容
05/03 21:33, 2F
這正是我想到的點 如果我今天故意拿跑車繼承動物 那按照語法 就變成跑車is a動物 聽起來就很不合理

05/03 21:53, 6年前 , 3F
我覺得你可以舉個例子
05/03 21:53, 3F

05/03 21:53, 6年前 , 4F
怎樣的情況是你會用繼承 然後用子包含父類別是聽起來很順的
05/03 21:53, 4F

05/03 23:54, 6年前 , 5F
is-a 這個名字會這麼叫就是用英文的 is a 連起來表示關係
05/03 23:54, 5F

05/03 23:55, 6年前 , 6F
狗 is a 動物 ← 像是這種關係
05/03 23:55, 6F

05/03 23:55, 6年前 , 7F
也就是說動物能做的事狗也能做, 雖然怎麼做可能不盡相同
05/03 23:55, 7F

05/03 23:56, 6年前 , 8F
你需要動物做事的地方你可以抓一隻狗來
05/03 23:56, 8F
但是如果是我上面舉的跑車繼承動物例子 就很怪了

05/04 02:30, 6年前 , 9F
修改是指改內部的實作,對外的介面是不能變的
05/04 02:30, 9F

05/04 02:33, 6年前 , 10F
對外部來說,就可以把子類別的物件當成父類別的物件來用
05/04 02:33, 10F
這裡不是很懂 可以再解釋一下「對外的介面是不能變」的意思嗎

05/04 02:33, 6年前 , 11F
子類別的物件就是一個(is-a)父類別的物件
05/04 02:33, 11F

05/04 02:37, 6年前 , 12F
物件導向的封裝就是只看公開介面,去想裡面怎麼做的就偏了
05/04 02:37, 12F

05/04 02:38, 6年前 , 13F
對compiler或interpreter來說要實作這種設計當然會變成記憶
05/04 02:38, 13F

05/04 02:39, 6年前 , 14F
體裡子類別的那份裡面要放一份父類別的東西,但是那不是你
05/04 02:39, 14F

05/04 02:42, 6年前 , 15F
時要去擔心的事
05/04 02:42, 15F
※ 編輯: lueichun (59.120.148.217), 05/04/2018 09:58:35

05/04 10:21, 6年前 , 16F
那是你取名叫跑車,取名黑豹不就是了
05/04 10:21, 16F

05/04 10:22, 6年前 , 17F
另一點因為繼承動物,你的跑車只會有動物的特性
05/04 10:22, 17F

05/04 10:23, 6年前 , 18F
不會因為他叫跑車就多了引擎和輪子
05/04 10:23, 18F

05/04 10:24, 6年前 , 19F
即使你在跑車類新增引擎輪子,他只是像動物的跑車
05/04 10:24, 19F

05/04 10:46, 6年前 , 20F
以你的例子來說,假設跑車繼承動物(用哺乳動物比較單純)
05/04 10:46, 20F

05/04 10:47, 6年前 , 21F
這個跑車外顯行為一定有會呼吸、兩性生殖、會哺乳..等
05/04 10:47, 21F

05/04 10:48, 6年前 , 22F
繼承了什麼就決定了它是什麼
05/04 10:48, 22F

05/04 10:48, 6年前 , 23F
你會說出跑車繼承動物其實觀念就有問題,不是先有兩個類別
05/04 10:48, 23F

05/04 10:48, 6年前 , 24F
再去套繼承關係,是先有父類別,子類別一定是其衍生
05/04 10:48, 24F

05/04 16:04, 6年前 , 25F
請從用途跟需求出發
05/04 16:04, 25F
※ 編輯: lueichun (36.230.19.60), 05/04/2018 21:09:39
文章代碼(AID): #1QwmaEBu (java)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
3
25
文章代碼(AID): #1QwmaEBu (java)