今天想記錄 sealed
(密封)修飾詞,它的定義很簡單,當你將 sealed
應用到類別時,sealed
修飾詞會防止其他類別繼承該類別,該類別則可繼承其它非 sealed
的類別
例如 Manager
類別使用 sealed
修飾詞,Manager
類別可繼承 Employee
類別,Employee
類別不可繼承 Manager
,當然,任何類別都不可繼承 Manager
class Employee { }
sealed class Manager : Employee { }
所以使用 sealed
修飾詞的類別不會有子類別,也不適合作為父類別使用,該類別也不可為抽象類別,因為 abstract
類別提供可實作的方法或屬性,其他子類別必須繼承 abstract
類別進行實作,所以當你將 sealed
和 abstract
一起使用時會產生錯誤
上圖錯誤清楚表示抽象類型不可以是密封或是靜態
sealed
也可以使用在可覆寫父類別中的虛擬方法或屬性,該類別允許其他類別繼承,但可防止他們覆寫特定的虛擬方法或屬性
class X
{
protected virtual void M1() { }
protected virtual void M2() { }
}
class Y : X
{
// sealed 可使用於可覆寫方法
protected sealed override void M1() { }
protected override void M2() { }
}
class Z : Y
{
// 此時無法覆寫密封方法
//protected override void M1() { }
protected override void M2() { }
}
由於 Y
類別覆寫了 M1
方法並設置為 sealed
,所以當 Z
類別繼承 Y
類別時,Z
類別將無法覆寫 M1
方法,如果強制覆寫則會產生錯誤
需要特別注意的地方:不是所有方法都可做為密封方法,要作為密封方法的話,必須覆寫父類別的虛擬方法並實作該方法,所以在密封方法中 sealed
和 override
修飾詞會同時使用
Reference
Thanks for reading the article 🌷 🌻 🌼
If you like it, please don't hesitate to click heart button ❤️
or follow my GitHub ⭐
or buy me a coffee ⬇️ I'd appreciate it.
Top comments (0)