3 分鐘閱讀

物件導向-抽象類別

有時候類別是一個概念

以前的人有四種職業,士、農、工、商

所以要設計四種類別,而且有一個共通之處,它們都是職業

所以再設計一個基礎類別會合理一點

不過對我們來說,職業這個類別不需要實體化

因為現實中的職業一定在這士、農、工、商裡面

抽象類別是類別與概念的混合體

  1. 跟類別一樣,你可以宣告欄位與方法,也可以實作方法
  2. 跟介面一樣,你也可以定義一些方法並且不實作,給繼承的 類別或介面一個契約
  3. 但是不可以實體化,如同前面所述,他是一個概念

如何不讓類別實例化

這邊根據程式語言不同,會有些許不一樣

C# and Java 在class前面加一個abstract

abstract class Job{
 
}

python 因為沒有抽象類別 可以使用 abc 套件輔助

import abc
class Job(metaclass=abc.ABCMeta):
  # code 

抽象方法沒有實作

抽象方法不可以實作,推回來,可以發現介面的方法都是抽象方法 但是如何在抽象類別加入抽象方法呢 根據語言不同也會些許不一樣

C# and Java 在方法型態前面加一個abstract

abstract class Job{
  abstract void Do(){}
}

python 在方法上面加入@abc.abstractmethod修飾語

import abc
class Job(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def Do(self):
        return NotImplemented

標籤:

更新時間: