iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 5
0
自我挑戰組

我的語言自學接力系列 第 5

D5:[Java]類別的繼承(overriding)

  • 分享至 

  • xImage
  •  

改寫為 Java polymorphism 多型技術之一,同為多型技術技術的有之前提過的多載,
讓我們先瞧瞧多載與改寫的比較。

多載 overloading:名稱相同,透過不同引數、型態,來呼叫相對應的函數。

改寫 overriding:於子類別中,定義與父類別均相同的函數(名稱相同,引數個數相同)。

讓我們先透過一簡單範例了解 改寫的意思以及其用法:
透過上一篇 protected 的範例做本次範例

class CCircle              // 父類別 CCircle
{
   public CCircle(){}
   public void show()         // 父類別的 show() 函數
   {
      System.out.println("父類別的show()");
   }
}

class CCoin extends CCircle   // 子類別 CCoin
{
   public CCoin(){}
   public void show()         // 子類別的 show() 函數
   {
      System.out.println("子類別的show()");
   }
}

public class overriding
{
   public static void main(String args[])
   {
      CCoin coin=new CCoin();
      coin.show();         // 呼叫 show() 函數
   }
}

由此範例主要想表達的問題為:

於main() 呼叫show 函數時,是呼叫子類別中的show() 還是父類別中的show()

由程式執行的結果:子類別的show()

這種情況就是改寫 (overriding) ,子類別的show() 取代了父類別的show()


另外 也可以宣告父類別變數來存取子類別的物件:

CCoin coin=new CCoin();
將上述寫法 改成下方寫法:

CCircle coin=new CCoin();
在以上的成立的條件為:僅限於有「改寫」的情況發生下,才可以透過宣告父類別變數來存取子類別物件。


此時 改寫的好處就在這邊!如果有好幾個子類別繼承一個父類別,
那麼僅需要建立一個子類別物件,並宣告父類別變數來存取之。

我們可以看一下以下程式的截圖:

http://ithelp.ithome.com.tw/upload/images/20161203/20103312j6wHqXgmwl.jpg

左邊為分別宣告子類別變數來指到建立的物件。
右邊為宣告父類別變數來分別指向這些物件。

透過改寫的技術,可以讓程式碼更有一致性:
(下方左程式碼)在呼叫area() 函數時必須一個一個去呼叫;
但(下方右程式碼)只需要套一個迴圈,並可分別呼叫相對應的 area()函數。

http://ithelp.ithome.com.tw/upload/images/20161203/20103312RChEIDLr0n.png


如果您喜歡我的文章,可以至 4xDevJava 學習系列閱讀更多 Java 文章。


上一篇
D4:[Java]類別的繼承(protected members)
下一篇
D6:[Java]super() 與 this()
系列文
我的語言自學接力31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言