SlideShare a Scribd company logo
Submit Search
Upload
CH07:介面與多型
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
0 likes
•
236 views
1
of
62
CH07:介面與多型
•
0 likes
•
236 views
Report
Share
Download Now
Download to read offline
Technology
使用介面定義行為 瞭解介面的多型操作 利用介面列舉常數 利用enum列舉常數
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
介面與多型 by
介面與多型
Justin Lin
874 views
•
67 slides
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/Security
Justin Lin
280 views
•
58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理
Justin Lin
153 views
•
30 slides
More Related Content
More from Justin Lin
Ch07 使用 JSTL by
Ch07 使用 JSTL
Justin Lin
161 views
•
74 slides
Ch06 使用 JSP by
Ch06 使用 JSP
Justin Lin
250 views
•
83 slides
Ch05 Servlet 進階 API、過濾器與傾聽器 by
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
204 views
•
69 slides
Ch04 會話管理 by
Ch04 會話管理
Justin Lin
238 views
•
30 slides
Ch03 請求與回應 by
Ch03 請求與回應
Justin Lin
236 views
•
73 slides
Ch02 撰寫與設定 Servlet by
Ch02 撰寫與設定 Servlet
Justin Lin
352 views
•
37 slides
More from Justin Lin
(20)
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTL
Justin Lin
•
161 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理
Justin Lin
•
238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應
Justin Lin
•
236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式
Justin Lin
•
1.2K views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換
Justin Lin
•
156 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組
Justin Lin
•
245 views
7. 例外處理 by Justin Lin
7. 例外處理
Justin Lin
•
115 views
6. 類別的繼承 by Justin Lin
6. 類別的繼承
Justin Lin
•
166 views
5. 從模組到類別 by Justin Lin
5. 從模組到類別
Justin Lin
•
169 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式
Justin Lin
•
188 views
3.型態與運算子 by Justin Lin
3.型態與運算子
Justin Lin
•
199 views
1. Python起步走 by Justin Lin
1. Python起步走
Justin Lin
•
662 views
Recently uploaded
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
IttrainingIttraining
40 views
•
37 slides
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
IttrainingIttraining
43 views
•
25 slides
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
151 views
•
54 slides
AI Technology & Development of Civilization by
AI Technology & Development of Civilization
unclebrown017
44 views
•
74 slides
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
IttrainingIttraining
43 views
•
32 slides
Hacking Facebook for fun and profit by Pranav Hivarekar by
Hacking Facebook for fun and profit by Pranav Hivarekar
Pranav Hivarekar
6 views
•
69 slides
Recently uploaded
(6)
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
商品辨識定位系統_艾鍗學院-AIoT智能行動服務物聯網班
IttrainingIttraining
•
40 views
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
AIoT 智能商店_艾鍗學院-AIoT智能行動服務物聯網班
IttrainingIttraining
•
43 views
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式 by Shengyou Fan
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
•
151 views
AI Technology & Development of Civilization by unclebrown017
AI Technology & Development of Civilization
unclebrown017
•
44 views
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班 by IttrainingIttraining
居家雲端照護系統_艾鍗學院-AIoT智能行動服務物聯網班
IttrainingIttraining
•
43 views
Hacking Facebook for fun and profit by Pranav Hivarekar by Pranav Hivarekar
Hacking Facebook for fun and profit by Pranav Hivarekar
Pranav Hivarekar
•
6 views
CH07:介面與多型
1.
1
2.
介面與多型 學習目標 • 使用介面定義行為 • 瞭解介面的多型操作 •
利用介面列舉常數 • 利用enum列舉常數 2
3.
使用介面定義行為 • 海洋樂園,全部東西都會游泳 3
4.
4
5.
• 為什麼都是魚?人也會游泳啊! 5
6.
• Human類別繼承Fish...等一下!Human繼承 Fish? 6
7.
• 只能繼承一個父類別,更強化了「是一種」 關係的限制性 • 老闆突發奇想,想把海洋樂園變為海空樂園 •
FlyingFish同時繼承Fish跟Bird嗎? 7
8.
• 「全部東西」都會「游泳」,而不是「某種 東西」都會「游泳」 • 先前的設計方式只解決了「全部魚」都會「 游泳」,只要它是一種魚 8
9.
• 「全部東西」都會「游泳」,代表「游泳」 這個「行為」可以被全部東西「擁有」,而 不是「某種」東西專屬 9
10.
10
11.
11
12.
12
13.
13
14.
• 繼承會有「是一種」關係 • 實作介面則表示「擁有行為」然而不會有「 是一種」的關係 14
15.
行為的多型 • 可以通過編譯 15
16.
• 是否可通過編譯? • 加上扮演(Cast)語法: 16
17.
• 第二行編譯失敗: • 加上扮演語法: 17
18.
• 拋出ClassCastException錯誤: • 底下的例子也會出錯: 18
19.
• Java SE
10以後支援var 19
20.
• 寫個static的doSwim()方法,讓會游的東 西都游起來? 20
21.
• 如果「種類」很多怎麼辦? 21
22.
解決需求變化 • 什麼叫有彈性?何謂可維護? • 如果今天老闆突發奇想,想把海洋樂園變為 海空樂園 •
有的東西會游泳,有的東西會飛,有的東西 會游也會飛 22
23.
• 類別可以實作兩個以上的類別,也就是擁有 兩種以上的行為 23
24.
• 類別可以同時繼承某類別,並實作某些介面 24
25.
• 要讓會游的東西游泳 25
26.
26
27.
• 後續需求超過了既有架構預留之彈性 • 老闆又開口了:不是全部的人類都會游泳吧 !有的飛機只會飛,不能停在海上啊! 27
28.
• 不再讓Human實作Swimmer: 28
29.
• 游泳選手是一種人,並擁有Swimmer的行為 29
30.
• 有的飛機只會飛 30
31.
• Seaplane會在海上航行 31
32.
• 程式中的直昇機就只會飛 32
33.
• 大規模的程式中調整程式架構會有多麼麻煩 • 不好的架構下要修改程式,很容易牽一髮而 動全身 33
34.
• 老闆又想到了:水裡的話,將淺海游泳與深 海潛行分開好了! • 介面可以繼承自另一個介面 34
35.
35 • 一般的船可以在淺海航行:
36.
• 潛水航是一種船,可以在淺海游泳,也可以 在深海潛行 36
37.
37
38.
• 需求不斷變化,架構也有可能因此而修改 • 好的架構在修改時,其實也不會全部的程式 碼都被牽動 •
他說一個你改一個,也不是辦法 • 找個時間,好好跟老闆談談這個程式的需求 邊界到底在哪吧! 38
39.
介面語法細節 • 方法可宣告為public abstract •
可以省略public abstract: 39
40.
• 編譯器會自動加上public abstract 40
41.
• 從JDK8開始,interface的方法可以有限 地實作 • 可以定義常數 41
42.
42
43.
43
44.
• 只能定義public static
final列舉常數 44
45.
• 有兩個介面都定義了某方法 45
46.
• 程式面來說,不會有錯誤,照樣通過編譯: 46
47.
• Some與Other定義的execute()是否表示 不同的行為? • 如果表示不同的行為,那麼Service在實作 時,應該有不同的方法實作 •
那麼Some與Other的execute()方法,就 得在名稱上有所不同,Service在實作時才 可以有兩個不同的方法實作 47
48.
• 如果表示相同的行為,那可以定義一個父介 面,在當中定義execute()方法 48
49.
49
50.
匿名內部類別 50
51.
• Java SE
10支援var自動推斷區域變數型態 51
52.
• Some介面定義了doService()方法 52
53.
• 假設你打算開發多人連線程式,對每個連線 客戶端,都會建立Client物件封裝相關資訊 53
54.
• 可以將Client加入或移除的資訊封裝為 ClientEvent: 54
55.
• 如果有物件對Client加入ClientQueue有 興趣,可以實作這個介面: • 如何在ClientQueue新增或移除Client時 予以通知呢? 55
56.
56
57.
57
58.
58
59.
• 在JDK8出現前 59
60.
使用enum列舉常數 60
61.
61
62.
62