iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
JavaScript

大樂透對獎系列 第 15

繼承

  • 分享至 

  • xImage
  •  

在Java中,子類別只能繼承一個父類別,繼承除了可避免類別間重複的實作定義外,還有個重要的關係,那就是子類別與父類別間會有is a的關係,中文稱為「是一種」的關係,SwordsMan繼承了Role,SwordsMan是一種Role,Magician繼承了Role,Magician 是一種 Role。

為何要知道繼承時,父類別與子類別間會有「是一種」的關係?因為要開始理解多型(Polymorphism),必須先知道你操作的物件是哪一種東西。

編譯器就是語法檢查器,要知道以上程式片段為何可以通過編譯,為何無法通過編譯,就是將自己當作編譯器,檢查語法的邏輯是否正確,方式是從 = 號右邊往左讀:右邊是不是一種左邊呢(右邊型態是不是左邊型態的子類別)。

SwordsMan swordsMan = new Role(); // Role 是不是一種 SwordsMan?
Magician magician = new Role(); // Role 是不是一種 Magician?

編譯器認為第一行,Role不一定是一種SwrodsMan,編譯失敗,對於第二行,編譯器認為Role不一定是一種Magician,編譯失敗。

Role role1 = new SwordsMan();
SwordsMan swordsMan = role1;

這個程式片段最後會編譯失敗,先從第一行看,SwordsMan是一種Role,這行可以通過編譯。編譯器檢查這類語法,一次只看一行,就第二行而言,編譯器看到role1為Role宣告的名稱,於是檢查Role是不是一種SwordsMan,答案是不一定,所以編譯失敗在第二行!


上一篇
資料載體
下一篇
繼承
系列文
大樂透對獎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言