重寫set get
- 可以將一個(gè)父類的存儲(chǔ)屬性重寫成計(jì)算屬性
- 不可以將一個(gè)父類的存儲(chǔ)屬性再重寫成存儲(chǔ)屬性
- 你可以將一個(gè)繼承來的只讀屬性重寫為一個(gè)讀寫屬性,只需要在重寫版本的屬性里提供 getter 和 setter 即可。但是,你不可以將一個(gè)繼承來的讀寫屬性重寫為一個(gè)只讀屬性。
重寫屬性觀察器
- 不可以為繼承來的常量存儲(chǔ)型屬性或繼承來的只讀計(jì)算型屬性添加屬性觀察器。這些屬性的值是不可以被設(shè)置的,所以,為它們提供willSet或didSet實(shí)現(xiàn)是不恰當(dāng)。
- 此外還要注意,你不可以同時(shí)提供重寫的 setter 和重寫的屬性觀察器。如果你想觀察屬性值的變化,并且你已經(jīng)為那個(gè)屬性提供了定制的 setter,那么你在 setter 中就可以觀察到任何值變化了。
防止重寫
- 可以通過把方法,屬性或下標(biāo)標(biāo)記為final來防止它們被重寫,只需要在聲明關(guān)鍵字前加上final修飾符即可
例如:final var,final func,final class func,以及final subscript - 如果你重寫了帶有final標(biāo)記的方法,屬性或下標(biāo),在編譯時(shí)會(huì)報(bào)錯(cuò)。在類擴(kuò)展中的方法,屬性或下標(biāo)也可以在擴(kuò)展的定義里標(biāo)記為 final 的。
- 可以通過在關(guān)鍵字class前添加final修飾符(final class)來將整個(gè)類標(biāo)記為 final 的。這樣的類是不可被繼承的,試圖繼承這樣的類會(huì)導(dǎo)致編譯報(bào)錯(cuò)。