final Class和Class有什么区别?
答
最终是类改性剂,其防止它被遗传或被重写。从苹果公司的文件
您可以将其标记为最终预防方法,属性,或者被覆盖 标。通过该方法,属性或标的介绍人关键字之前写final修饰符 做到这一点(例如 作为最终无功,最终FUNC,最后一类FUNC,和最后的下标)。
任何试图重写 子类中的最终方法,属性或下标都会报告为编译时错误。要添加到一类的扩展方法,属性,或 标也可以被标记 作为扩展的定义范围内的决赛。
您可以通过在其类定义(final类)class关键字前写的最后修改 标志着整个类为final。任何 尝试子类的最终类报告为编译时错误。
答
最终意味着没有人能够继承这个类。
答
当你知道一个声明不需要重写 时使用final。最后关键字上的类,方法,或 属性指示该声明不能被覆盖的限制。 这允许编译器安全地避免动态分配间接。
了解更多:
答
除了final
声明不也需要被重写具有比没有用final
更好的性能,因为在运行时final
禁用动态传递,其中保存运行时开销。标有final
答
类不能被重写。
为什么要关心类是否可以被覆盖?
,需要考虑两件事情:
- 作为一个API设计/开发人员,你可能在你的框架类,可以被滥用或子类时,误用。
final
可以防止课程被分类 - 任务完成。您还可以使用final
来标记非最终类的方法,属性,甚至下标。这会产生同样的影响,但对于班级的特定部分。 - 标记类为
final
也告诉Swift编译器该方法应直接调用(静态调度),而不是从方法表(动态调度)查找函数。这可以减少函数调用开销并为您提供额外的性能。你可以在Swift开发者博客上read more on this。
'A'不能扩展https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html –
@埃克托您的意思是继承;扩展在Swift中是完全不同的东西。 – Hamish
是的,没错。抱歉 –