第二章:簡單 Java 程式解析
第三章:變數與資料型態
第四章:運算子、運算式與敘述
第五章:選擇性敘述與迴圈
第十章:實例變數與函數、類別變數與函數
Powered By GitBook
Overriding
改寫為 Java polymorphism 多型技術之一,同為多型技術技術的有之前提過的多載, 讓我們先瞧瞧多載與改寫的比較。
多載 overloading:名稱相同,透過不同引數、型態,來呼叫相對應的函數。
改寫 overriding:於子類別中,定義與父類別均相同的函數(名稱相同,引數個數相同)。
讓我們先透過一簡單範例了解 改寫的意思以及其用法: 透過上一篇 protected 的範例做本次範例
1
class CCircle // 父類別 CCircle
2
{
3
public CCircle(){}
4
public void show() // 父類別的 show() 函數
5
{
6
System.out.println("父類別的show()");
7
}
8
}
9
10
class CCoin extends CCircle // 子類別 CCoin
11
{
12
public CCoin(){}
13
public void show() // 子類別的 show() 函數
14
{
15
System.out.println("子類別的show()");
16
}
17
}
18
19
public class overriding
20
{
21
public static void main(String args[])
22
{
23
CCoin coin=new CCoin();
24
coin.show(); // 呼叫 show() 函數
25
}
26
}
Copied!
由此範例主要想表達的問題為:
於main() 呼叫show 函數時,是呼叫子類別中的show() 還是父類別中的show()
由程式執行的結果:子類別的show()
這種情況就是改寫 (overriding) ,子類別的show() 取代了父類別的show()
另外 也可以宣告父類別變數來存取子類別的物件:
1
CCoin coin=new CCoin();
Copied!
將上述寫法 改成下方寫法:
1
CCircle coin=new CCoin();
Copied!
在以上的成立的條件為:僅限於有「改寫」的情況發生下,才可以透過宣告父類別變數來存取子類別物件。
此時 改寫的好處就在這邊!如果有好幾個子類別繼承一個父類別, 那麼僅需要建立一個子類別物件,並宣告父類別變數來存取之。
我們可以看一下以下程式的截圖:
左邊為分別宣告子類別變數來指到建立的物件。 右邊為宣告父類別變數來分別指向這些物件。
透過改寫的技術,可以讓程式碼更有一致性: (下方左程式碼)在呼叫area() 函數時必須一個一個去呼叫; 但(下方右程式碼)只需要套一個迴圈,並可分別呼叫相對應的 area()函數。
Last modified 9mo ago
Copy link