物件導向-抽象類別
物件導向-抽象類別
有時候類別是一個概念
以前的人有四種職業,士、農、工、商
所以要設計四種類別,而且有一個共通之處,它們都是職業
所以再設計一個基礎類別會合理一點
不過對我們來說,職業這個類別不需要實體化
因為現實中的職業一定在這士、農、工、商裡面
抽象類別是類別與概念的混合體
- 跟類別一樣,你可以宣告欄位與方法,也可以實作方法
- 跟介面一樣,你也可以定義一些方法並且不實作,給繼承的 類別或介面一個契約
- 但是不可以實體化,如同前面所述,他是一個概念
如何不讓類別實例化
這邊根據程式語言不同,會有些許不一樣
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