繼承?
????????在 Vala 中,一個類可以繼承自 ?一個或零個? 其他類。盡管實際開發中通常繼承一個類(不同于 Java 等語言的隱式繼承機制),但 Vala 并不強制要求必須繼承。
????????當定義繼承自其他類的子類時,子類的實例與父類將形成 ?"is-a"? 關系。這意味著:
- 子類實例同時也是父類實例;
- 父類實例支持的操作,子類實例均支持;
- 任何需要父類實例的場景,均可替換為子類實例。
????????在類定義中,開發者可以 ?精確控制? 對象方法和數據的訪問權限。以下示例演示了多種權限修飾符的用法:
class SuperClass : GLib.Object {private int data;public SuperClass(int data) {this.data = data;}protected void protected_method() {}public static void public_static_method() {}
}class SubClass : SuperClass {public SubClass() {base(10);}
}
data
?是?SuperClass
?的 ?私有實例成員?,僅允許?SuperClass
?內部的代碼訪問;protected_method
?是?SuperClass
?的 ?受保護實例方法?,僅允許?SuperClass
?及其子類的實例調用;public_static_method
?是?SuperClass
?的 ?公共靜態方法?:static
?修飾符使其無需實例即可調用(執行時無?this
?引用);public
?修飾符允許任何代碼調用,無論其與?SuperClass
?的關系。
通過上述定義,SubClass
?實例將包含?SuperClass
?的所有三個成員,但只能訪問 ?非私有成員?(即?protected_method
?和?public_static_method
)。外部代碼僅能訪問?public_static_method
。
?????????構造函數鏈式調用?:
????????子類構造函數可通過?base
?關鍵字調用父類構造函數(如示例中?base(10)
?調用了父類的?SuperClass(int data)
?構造函數)。