Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

CH07:介面與多型

使用介面定義行為
瞭解介面的多型操作
利用介面列舉常數
利用enum列舉常數

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

  • Be the first to like this

CH07:介面與多型

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

    Be the first to comment

使用介面定義行為 瞭解介面的多型操作 利用介面列舉常數 利用enum列舉常數

Views

Total views

158

On Slideshare

0

From embeds

0

Number of embeds

0

Actions

Downloads

27

Shares

0

Comments

0

Likes

0

×