CH07:介面與多型

Justin Lin
Justin LinTechnology / Community Evangelist at Free lancer
1
介面與多型
學習目標
• 使用介面定義行為
• 瞭解介面的多型操作
• 利用介面列舉常數
• 利用enum列舉常數
2
使用介面定義行為
• 海洋樂園,全部東西都會游泳
3
4
• 為什麼都是魚?人也會游泳啊!
5
• Human類別繼承Fish...等一下!Human繼承
Fish?
6
• 只能繼承一個父類別,更強化了「是一種」
關係的限制性
• 老闆突發奇想,想把海洋樂園變為海空樂園
• FlyingFish同時繼承Fish跟Bird嗎?
7
• 「全部東西」都會「游泳」,而不是「某種
東西」都會「游泳」
• 先前的設計方式只解決了「全部魚」都會「
游泳」,只要它是一種魚
8
• 「全部東西」都會「游泳」,代表「游泳」
這個「行為」可以被全部東西「擁有」,而
不是「某種」東西專屬
9
10
11
12
13
• 繼承會有「是一種」關係
• 實作介面則表示「擁有行為」然而不會有「
是一種」的關係
14
行為的多型
• 可以通過編譯
15
• 是否可通過編譯?
• 加上扮演(Cast)語法:
16
• 第二行編譯失敗:
• 加上扮演語法:
17
• 拋出ClassCastException錯誤:
• 底下的例子也會出錯:
18
• Java SE 10以後支援var
19
• 寫個static的doSwim()方法,讓會游的東
西都游起來?
20
• 如果「種類」很多怎麼辦?
21
解決需求變化
• 什麼叫有彈性?何謂可維護?
• 如果今天老闆突發奇想,想把海洋樂園變為
海空樂園
• 有的東西會游泳,有的東西會飛,有的東西
會游也會飛
22
• 類別可以實作兩個以上的類別,也就是擁有
兩種以上的行為
23
• 類別可以同時繼承某類別,並實作某些介面
24
• 要讓會游的東西游泳
25
26
• 後續需求超過了既有架構預留之彈性
• 老闆又開口了:不是全部的人類都會游泳吧
!有的飛機只會飛,不能停在海上啊!
27
• 不再讓Human實作Swimmer:
28
• 游泳選手是一種人,並擁有Swimmer的行為
29
• 有的飛機只會飛
30
• Seaplane會在海上航行
31
• 程式中的直昇機就只會飛
32
• 大規模的程式中調整程式架構會有多麼麻煩
• 不好的架構下要修改程式,很容易牽一髮而
動全身
33
• 老闆又想到了:水裡的話,將淺海游泳與深
海潛行分開好了!
• 介面可以繼承自另一個介面
34
35
• 一般的船可以在淺海航行:
• 潛水航是一種船,可以在淺海游泳,也可以
在深海潛行
36
37
• 需求不斷變化,架構也有可能因此而修改
• 好的架構在修改時,其實也不會全部的程式
碼都被牽動
• 他說一個你改一個,也不是辦法
• 找個時間,好好跟老闆談談這個程式的需求
邊界到底在哪吧!
38
介面語法細節
• 方法可宣告為public abstract
• 可以省略public abstract:
39
• 編譯器會自動加上public abstract
40
• 從JDK8開始,interface的方法可以有限
地實作
• 可以定義常數
41
42
43
• 只能定義public static final列舉常數
44
• 有兩個介面都定義了某方法
45
• 程式面來說,不會有錯誤,照樣通過編譯:
46
• Some與Other定義的execute()是否表示
不同的行為?
• 如果表示不同的行為,那麼Service在實作
時,應該有不同的方法實作
• 那麼Some與Other的execute()方法,就
得在名稱上有所不同,Service在實作時才
可以有兩個不同的方法實作
47
• 如果表示相同的行為,那可以定義一個父介
面,在當中定義execute()方法
48
49
匿名內部類別
50
• Java SE 10支援var自動推斷區域變數型態
51
• Some介面定義了doService()方法
52
• 假設你打算開發多人連線程式,對每個連線
客戶端,都會建立Client物件封裝相關資訊
53
• 可以將Client加入或移除的資訊封裝為
ClientEvent:
54
• 如果有物件對Client加入ClientQueue有
興趣,可以實作這個介面:
• 如何在ClientQueue新增或移除Client時
予以通知呢?
55
56
57
58
• 在JDK8出現前
59
使用enum列舉常數
60
61
62
1 of 62

Recommended

介面與多型 by
介面與多型介面與多型
介面與多型Justin Lin
874 views67 slides
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
872 views22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
280 views58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
274 views31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
157 views8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
153 views30 slides

More Related Content

More from Justin Lin

Ch07 使用 JSTL by
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
161 views74 slides
Ch06 使用 JSP by
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
250 views83 slides
Ch05 Servlet 進階 API、過濾器與傾聽器 by
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
204 views69 slides
Ch04 會話管理 by
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
238 views30 slides
Ch03 請求與回應 by
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
236 views73 slides
Ch02 撰寫與設定 Servlet by
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
352 views37 slides

More from Justin Lin(20)

Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
Justin Lin161 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
Justin Lin250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
Justin Lin238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
Justin Lin236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
Justin Lin352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin1.2K views
14. 進階主題 by Justin Lin
14. 進階主題14. 進階主題
14. 進階主題
Justin Lin406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
Justin Lin237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
Justin Lin153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
Justin Lin149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
Justin Lin156 views
9. 資料結構 by Justin Lin
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
Justin Lin245 views
7. 例外處理 by Justin Lin
7. 例外處理7. 例外處理
7. 例外處理
Justin Lin115 views
6. 類別的繼承 by Justin Lin
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
Justin Lin166 views
5. 從模組到類別 by Justin Lin
5. 從模組到類別5. 從模組到類別
5. 從模組到類別
Justin Lin169 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式4. 流程語法與函式
4. 流程語法與函式
Justin Lin188 views
3.型態與運算子 by Justin Lin
3.型態與運算子3.型態與運算子
3.型態與運算子
Justin Lin199 views
1. Python起步走 by Justin Lin
1. Python起步走1. Python起步走
1. Python起步走
Justin Lin662 views

Recently uploaded

商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
40 views37 slides
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views25 slides
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
151 views54 slides
AI Technology & Development of Civilization by
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilizationunclebrown017
44 views74 slides
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班IttrainingIttraining
43 views32 slides
Hacking Facebook for fun and profit by Pranav Hivarekar by
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarPranav Hivarekar
6 views69 slides

Recently uploaded(6)

商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by Shengyou Fan
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan151 views
AI Technology & Development of Civilization by unclebrown017
AI Technology & Development of CivilizationAI Technology & Development of Civilization
AI Technology & Development of Civilization
unclebrown01744 views
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
Hacking Facebook for fun and profit by Pranav Hivarekar by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav HivarekarHacking Facebook for fun and profit by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav Hivarekar

CH07:介面與多型