2
A
答えて
7
決勝継承されたり上書きされるのを防ぐことができ、クラス修飾子です。
アップルのドキュメントから、あなたは 最終としてそれをマークすることによって を上書きされるのメソッド、プロパティ、または下付きを防ぐことができます。これを行うには、メソッド、プロパティ、または添字のintroducerキーワードの前にfinal修飾子 を記述します(最後のvar、final func、finalクラスfunc、および最後の添え字として など)。サブクラス の最終メソッド、プロパティ、または添字をオーバーライドしようとすると、コンパイル時エラーが報告されます。エクステンションのクラスに追加するメソッド、プロパティ、または サブスクリプトは、エクステンションの定義内で最終的に とマークすることもできます。
class定義(finalクラス)のclassキーワードの前にfinal修飾子 を記述することで、クラス全体をfinalとしてマークすることができます。 最終クラスをサブクラス化しようとすると、コンパイル時エラーとして報告されます。
3
最終的には、誰もこのクラスから継承することはできません。
11
宣言が に上書きされる必要がないことがわかっている場合は、finalを使用してください。最後のキーワードは、クラス、メソッド、またはの宣言がをオーバーライドできないことを示す プロパティの制限です。 これにより、コンパイラは動的ディスパッチ間接を安全に削除できます。
続きを読む:
0
final
ほかに宣言も上書きする必要はありませんfinal
は、実行時のオーバーヘッドを保存し、実行時に動的ディスパッチを無効にしているため、無使用final
よりも優れた性能を持っています。
3
final
のクラスはオーバーライドできません。
なぜ1は全くクラスは缶または無効にすることができないかどうかを気にする必要がありますか?
考慮すべき二つのものがあります:APIの設計者/開発者として
- が、あなたはサブクラス化時に虐待されたり悪用される可能性があなたFrameworkのクラスを持っているかもしれません。
final
は、クラスをサブクラス化するのを防ぎます。final
を使用して、最終的ではないクラスのメソッド、プロパティ、および添え字をマークすることもできます。これは同じ影響を与えますが、クラスの特定の部分のためです。 - マーキングクラス
final
もSwiftコンパイラメソッドテーブル(動的ディスパッチ)から関数を検索するのではなく、そのメソッドを直接呼び出す必要があります(静的ディスパッチ)。これにより、関数呼び出しのオーバーヘッドが減り、余分なパフォーマンスが得られます。 Swift Developer Blogのread more on thisにアクセスできます。
関連する問題
- 1. C#のPingクラスとWebClientクラスの違いは何ですか?
- 2. C++クラス・ポインタとクラス・オブジェクトの間の違いは何ですか?
- 3. Apache TikaのMediaTypeクラスとMimeTypeクラスの違いは何ですか?
- 4. netty4のProtobufEncoderクラスとProtobufEncoderNanoクラスの違いは何ですか?
- 5. 更新クラスと更新クラスの違いは何ですか
- 6. ConfigurationManagerクラスとSettingsクラスの違いは何ですか?
- 7. NetworkStreamクラスとSocketクラスの違いは何ですか?
- 8. クラス、オブジェクト、エンティティ:違いは何ですか?
- 9. クラスの前方宣言とクラスの宣言の違いは何ですか?
- 10. constとreadonlyとstaticクラスの違いは何ですか
- 11. Javaの内部クラスとローカル内部クラスの違いは何ですか?
- 12. Google App EngineのQueryクラスとGqlqueryクラスの違いは何ですか?
- 13. jsのモジュールとPHPのクラスの違いは何ですか?
- 14. Structベースのクラスとクラスベースのシングルトンの違いは何ですか?
- 15. UMLの 'クラス図'と 'データモデル'の違いは何ですか?
- 16. C#の内部クラスとパブリッククラスの違いは何ですか?
- 17. C#のオブジェクトとクラスの違いは何ですか?
- 18. ステレオタイプとUMLのクラス継承の違いは何ですか?
- 19. LinkedListクラスのelement()メソッドとgetFirst()メソッドの違いは何ですか?
- 20. Omniture Test&TargetのクラスとIDの違いは何ですか?
- 21. フラグメントと基本クラスの拡張の違いは何ですか?
- 22. Liferay dxpのIndexerとIndexWriterクラスの違いは何ですか?
- 23. クラスとライブラリの違いは何ですか?
- 24. 抽象クラスとミックスインの違いは何ですか?
- 25. Java:列挙型と値クラスの違いは何ですか?
- 26. クラス変数とクラスインスタンスの違いは何ですか?
- 27. idとクラスの違いは何ですか
- 28. SyncanoクラスとSyncanoDashboardの違いは何ですか?
- 29. HttpApplicationクラスとIHttpModuleの違いは何ですか?
- 30. グローバル変数と内部クラスの違いは何ですか?
は 'A'はあなたがから継承された意味https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html –
@エクトルを拡張することはできません。拡張はSwiftの全く別のものです。 – Hamish
はい、そうです。ごめんなさい –