CH06:繼承與多型

Justin Lin
Justin LinTechnology / Community Evangelist at Free lancer
1
繼承與多型
學習目標
• 瞭解繼承目的
• 瞭解繼承與多型的關係
• 知道如何重新定義方法
• 認識java.lang.Object
• 簡介垃圾收集機制
2
繼承共同行為與實作
3
• 重複在程式設計上,就是不好的訊號
4
5
多型與is-a
• 子類別只能繼承一個父類別
• 有is-a的關係,中文稱為「是一種」的關係
– SwordsMan是一種Role(SwordsMan is a
Role)
– Magician是一種Role(Magician is a Role)
6
• 可以通過編譯:
• 也可以通過編譯嗎?
• 為何無法通過編譯呢?
7
• 從=號右邊往左讀
– 右邊是不是一種左邊呢(右邊型態是不是左邊型
態的子類別)?
8
• 以下編譯失敗:
• 如果不想要編譯器囉嗦
9
• 明確要求編譯器別囉嗦了,編譯器就讓這段
程式碼通過編譯了,不過後果得自行負責!
10
• 編譯可以成功,但執行時期會出錯:
11
• 以下編譯成功,執行也沒問題:
• 以下程式片段會編譯失敗:
12
• 以下程式片段編譯成功,執行時也沒問題:
• 以下程式片段編譯成功,但執行時拋出
ClassCastException:
13
• 設計static方法,顯示所有角色的血量!
14
15
• 多型?使用單一介面操作多種型態的物件!
重新定義實作
• 請設計static方法,可以播放角色攻擊動畫
16
• 將fight()方法提昇至Role類別中定義:
• 重新定義(Override)
17
18
19
20
• 如果疏忽打錯字了:
21
抽象方法、抽象類別
• Role的fight()方法沒有撰寫程式碼
22
• 子類別若繼承抽象類別:
– 繼續標示該方法為abstract
– 實作抽象方法
23
protected成員
24
25
26
27
• Role類別原本就定義了toString()方法:
28
29
• 對於父類別的方法權限,只能擴大不能縮小
30
• 預設會呼叫父類別中無參數建構式
31
• 想執行父類別中某建構式,可使用super()
32
33
34
• 編譯器會在沒有撰寫任何建構式時,自動加
入無參數預設建構式(Default constructor)
• 如果自行定義了建構式,就不會自動加入任
何建構式了。
35
final關鍵字
• 在指定變數值之後,若不想改變值,可以在
宣告變數時加上final限定
• 若物件資料成員被宣告為final,沒有明確
使用=指定值,就表示延遲物件成員值的指定
• 若class使用了final關鍵字限定,就表示
這個類別在繼承體系中是最後一個,不會再
有子類別,也就是不能被繼承
36
37
• 定義方法時可以限定為final,表示子類別
不可以重新定義final方法
38
java.lang.Object
• 子類別只能繼承一個父類別
39
• 物件一定「是一種」Object
40
41
42
43
44
重新定義toString()
• Object的toString()預設定義為:
• System.out.print()等方法,就會呼叫
toString()
45
重新定義equals()
• Object類別就有定義的方法:
46
47
• instanceof檢查左運算元型態是否在右運算
元型態的繼承架構
• 實作equals()時通常也會實作hashCode()
48
關於垃圾收集
49
50
51
52
再看抽象類別
• 開發一個猜數字遊戲
53
• 老闆皺著眉頭說:「我有說要在文字模式下
執行遊戲嗎?」
54
55
1 of 55

Recommended

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
Ch09 整合資料庫 by
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
233 views92 slides

More Related Content

More from Justin Lin

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
CH1. 簡介 Web 應用程式 by
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
1.2K views55 slides

More from Justin Lin(20)

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 Lin238 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 Lin664 views
2. 從 REPL 到 IDE by Justin Lin
2. 從 REPL 到 IDE2. 從 REPL 到 IDE
2. 從 REPL 到 IDE
Justin Lin234 views

CH06:繼承與多型