2017-09-05 316 views
2

final class和Class有什麼區別?final Class和Class有什麼區別?

final class A { 

} 

class B {  

} 
+0

'A'不能擴展https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html –

+1

@埃克托您的意思是繼承;擴展在Swift中是完全不同的東西。 – Hamish

+0

是的,沒錯。抱歉 –

回答

7

最終是類改性劑,其防止它被遺傳或被重寫。從蘋果公司的文件

您可以將其標記爲最終預防方法,屬性,或者被覆蓋 標。通過該方法,屬性或標的介紹人關鍵字之前寫final修飾符 做到這一點(例如 作爲最終無功,最終FUNC,最後一類FUNC,和最後的下標)。

任何試圖重寫 子類中的最終方法,屬性或下標都會報告爲編譯時錯誤。要添加到一類的擴展方法,屬性,或 標也可以被標記 作爲擴展的定義範圍內的決賽。

您可以通過在其類定義(final類)class關鍵字前寫的最後修改 標誌着整個類爲final。任何 嘗試子類的最終類報告爲編譯時錯誤。

3

最終意味着沒有人能夠繼承這個類。

11

當你知道一個聲明不需要重寫 時使用final。最後關鍵字上的類,方法,或 屬性指示該聲明不能被覆蓋的限制。 這允許編譯器安全地避免動態分配間接。

瞭解更多:

https://developer.apple.com/swift/blog/?id=27

0

除了final聲明不也需要被重寫具有比沒有用final更好的性能,因爲在運行時final禁用動態傳遞,其中保存運行時開銷。標有final

3

類不能被重寫。


爲什麼要關心類是否可以被覆蓋?

,需要考慮兩件事情:

  1. 作爲一個API設計/開發人員,你可能在你的框架類,可以被濫用或子類時,誤用。 final可以防止課程被分類 - 任務完成。您還可以使用final來標記非最終類的方法,屬性,甚至下標。這會產生同樣的影響,但對於班級的特定部分。
  2. 標記類爲final也告訴Swift編譯器該方法應直接調用(靜態調度),而不是從方法表(動態調度)查找函數。這可以減少函數調用開銷併爲您提供額外的性能。你可以在Swift開發者博客上read more on this
相關問題