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.

CH06:繼承與多型

瞭解繼承目的
瞭解繼承與多型的關係
知道如何重新定義方法
認識java.lang.Object
簡介垃圾收集機制

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

CH06:繼承與多型

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

    Be the first to comment

瞭解繼承目的 瞭解繼承與多型的關係 知道如何重新定義方法 認識java.lang.Object 簡介垃圾收集機制

Views

Total views

191

On Slideshare

0

From embeds

0

Number of embeds

0

Actions

Downloads

30

Shares

0

Comments

0

Likes

0

×