# 物件導向

參考資料:(<https://dotblogs.com.tw/ace_dream/2016/01/10/oop1>)

封裝就不提了

繼承

父類別的方法若宣告為虛擬(virtual)，則表示該方法可以被子類別覆寫(非必需)。 父類別的方法若宣告為抽象(abstract)，則表示該子類別一定要覆寫該方法(子類別為抽象類別除外)。 類別若包含抽象成員，則該類別必需宣告為抽象類別。 若方法或屬性宣告為密封(sealed)，則不可以被子類別覆寫

```
//父類別、基礎類別(base class)
class person
{
    屬性A
    方法A
}

//子類別、衍生類別(Derived class)
class student:person
{
    屬性B
    方法B
}
```

## 多載、覆寫、多型

### 多型

多型(Polymorphism):又稱同名異式，是透過動態繫結的方式讓我們在程式執行時期可以動態決定物件參考所要執行的方法，多型允許我們在程式中使用名稱相同的方法或屬性，但不須考慮當時使用的物件型別是什麼。

### 多載

相同名稱、不同參數的方法。會依據傳入的參數個數、型別，去跑對應的方法。

### 覆寫

子類別改寫父類別的成員 1.必須接受相同個數的參數、相同的資料型別。 2.必須將父類別的方法宣告為`Virtual`，表示父類別允許被子類別的同名方法覆蓋。 3.必須將子類別的方法宣告為`override`，表示重新定義父類別的方法。

```
class 父類別
{
    virtual void 覆寫方法( ) {  };
}

class 子類別 : 父類別
{
    public override void 覆寫方法( ){  };
}
```
