C++、java、C#、Python、Php等語言均支持OOP,但是有很多規則,他們卻不盡相同,本文重點總結一下幾種語言在OOP中的共性與特性,只要把這些點區分開,其實幾種語言的代碼你就都可以運用自如。
詳見下表:
C++ | Java | C# | Python | PHP | Lua |
強類型(靜態類型) | 強類型(靜態類型) | 強類型(靜態類型) | 弱類型(動態類型) | 弱類型(動態類型) | 弱類型(動態類型) |
1.支持多繼承 | 1.不支持多繼承 | 1.不支持多繼承 | 1.支持多繼承 2.只有一種繼承方式(無關鍵字:class C(B,A)) | 1.支持多繼承 2.只支持一種繼承方式(關鍵字extends) | 不支持繼承,但可用metatable實現 |
1.無接口概念 | 1.有接口概念 2.支持接口多繼承 | 1.有接口概念 2.支持接口多繼承 | 1.無接口概念 | 1.有接口概念 2.支持接口多繼承 | 1.無接口概念 |
支持函數重載 | 支持函數重載 | 支持函數重載 | 1.不支持函數重載 2.可通過默認參數實現重載 | 1.不支持函數重載 2.可通過默認參數實現重載 | 1.不支持函數重載 2.可通過默認參數實現重載 |
支持子類覆蓋父類方法 | 支持子類覆蓋父類方法 | 支持子類覆蓋父類方法 | 支持子類覆蓋父類方法 | 支持子類覆蓋父類方法 | 支持子類覆蓋父類方法 |
不可封裝屬性 | 不可封裝屬性 | 可以封裝屬性 | 可以封裝屬性 | 不可封裝屬性 | 不可封裝屬性 |
隱藏成員變量使用:private/protected | 隱藏成員變量使用:private/protected | 隱藏成員變量使用:private/protected | 變量名稱前加雙下劃線 | 隱藏成員變量使用:private/protected | 變量用local修飾 |
this->訪問成員 | this.訪問成員 | this.訪問成員 | self.訪問成員 | $this->訪問成員 | self.訪問成員 |
構造函數爲類名 | 構造函數爲類名 | 構造函數爲類名 | __init__ | __construct | 無此概念 |
析構函數爲~類名 | 無需自己析構 | 無需自己析構 | __del__ | __destruct | 無此概念 |