# Overriding

改寫為 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();
```

在以上的成立的條件為：僅限於有「改寫」的情況發生下，才可以透過宣告父類別變數來存取子類別物件。

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

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

![](/files/-MPaGCn9YfkEv6NH2exB)

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

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

![](/files/-MPaGFhNYiDPTYSjzMn1)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://java.4-x.tw/java-11/java-overriding.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
