[問題] abstraction v.s. polymorphism
物件導向
OOP
Object-Oriented Programming
OOA
Object-Oriented Analysis
從以前就從網路上得知有四大觀念
但沒真正搞懂這兩個東西
abstraction
polymorphism
網路上的說法也不太一致
最近又再重看了一次
我這次的想法是這樣
abstraction 幾乎是所有 OOP 的核心思想
用簡單的東西表達複雜的東西
只需要知道如何操作各種東西
不需要知道那個東西到底是怎麼被做出來的
只是 OOP 著重於用 object 來做到 abstraction
而 functional programming 著重於用 function 來做到
也因次 OOP 衍生出其他三大觀念
encapsulation
inheritance
polymorphism
其中
polymorphism 在網路上也是有很多解釋
我覺得只要是能用一個百變怪來代表多個東西
那就是 polymorphism
1.
如果 A1 A2 A3... 和 B 的關係
是 extends 或 implements
讓 B b = (其中一個 A) a
這時百變怪 b 是(其中一個 A)
b 的函式其實是(其中一個 A)的函式
2.
override
和 1. 有點類似
但只侷限於 extends 的關係
3.
overload
同一個函式名稱可以代表多個功能類似但細微不同的運算
不知道我這樣想對不對?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 69.181.64.182
※ 文章網址: https://www.ptt.cc/bbs/java/M.1518421867.A.5E0.html
推
02/13 09:51,
6年前
, 1F
02/13 09:51, 1F
如果把 extends 和 implements 都看做類似的東西
先姑且把他們都叫做繼承 (大家先別玩文字遊戲)
我覺得 interface 其實就是一種可以多重繼承沒有實體的 class
有些人會用 is-a has-a 來區分 很容易會碰到多重繼承的問題
我覺得只有"未來不太可能會多重繼承的"才會用 extends class 的方式
例如那篇文說 我是(is-a)上班族 我是男朋友
上班族男朋友是 interface (implements)
這和 has-a = interface 的說法相抵觸
又說 BMWCar 繼承(extends) Car 而且 ToyotaCar 繼承 Car
同理 戰鬥機繼承飛機 運輸機繼承飛機
如果未來做出能在一般道路開又能在天上飛的交通工具
那豈不是這個交通工具就沒辦法同時繼承車子和飛機了嗎?
我並不是要提倡什麼都要用 interface
的確未來什麼事(多重繼承)都可能發生
但 extends class 還是有他的好處 他讓很多東西都可以重複使用
所以"未來不太可能會多重繼承的"還是可以用 extends class
OOP 其實有很多缺點和限制
所以 Java 做了很多相對應的 workaround
之後再用文字遊戲美化這些 workaround
interface 就是其中一個例子
很多 design pattern 也是
※ 編輯: erikkk (69.181.64.182), 02/13/2018 14:15:33
→
02/13 16:26,
6年前
, 2F
02/13 16:26, 2F
→
02/13 16:28,
6年前
, 3F
02/13 16:28, 3F
→
02/13 16:29,
6年前
, 4F
02/13 16:29, 4F
→
02/13 16:29,
6年前
, 5F
02/13 16:29, 5F
→
02/13 16:32,
6年前
, 6F
02/13 16:32, 6F
→
02/13 16:32,
6年前
, 7F
02/13 16:32, 7F
→
02/13 16:33,
6年前
, 8F
02/13 16:33, 8F
→
02/13 16:33,
6年前
, 9F
02/13 16:33, 9F
→
02/13 16:39,
6年前
, 10F
02/13 16:39, 10F
→
02/13 16:41,
6年前
, 11F
02/13 16:41, 11F
→
02/14 03:22,
6年前
, 12F
02/14 03:22, 12F
→
02/14 03:23,
6年前
, 13F
02/14 03:23, 13F
→
02/14 03:24,
6年前
, 14F
02/14 03:24, 14F
→
02/14 03:24,
6年前
, 15F
02/14 03:24, 15F
→
02/14 03:25,
6年前
, 16F
02/14 03:25, 16F
→
02/14 03:26,
6年前
, 17F
02/14 03:26, 17F
→
02/14 03:27,
6年前
, 18F
02/14 03:27, 18F
→
02/14 05:29,
6年前
, 19F
02/14 05:29, 19F
→
02/14 05:30,
6年前
, 20F
02/14 05:30, 20F
→
02/14 05:31,
6年前
, 21F
02/14 05:31, 21F
java 近期熱門文章
PTT數位生活區 即時熱門文章