当用户不需要让别人访问超类的方法,属性或下标,Swift 引入“final”属性,以防止覆盖。 当 “final” 属性被声明后,将不允许超类的方法,属性和下标被覆盖。在超类不可以有 'final' 。当 “final” 属性被声明后,用户限制子类创建。
复制代码
finalclassCircle{finalvar radius =12.5var area:String{return"of rectangle for (radius) "}}classRectangle:Circle{varprint=7overridevar area:String{returnsuper.area +" is now overridden as (print)"}}let rect =Rectangle()
rect.radius =25.0
rect.print=3
println("Radius (rect.area)")classSquare:Rectangle{overridevar radius:Double{
didSet {print=Int(radius/5.0)+1}}}let sq =Square()
sq.radius =100.0
println("Radius (sq.area)")
当我们使用 playground 运行上面的程序,得到以下结果。
复制代码
<stdin>:14:18: error: var overrides a 'final' var
override var area: String {
^
<stdin>:7:9: note: overridden declaration is here
var area: String {
^
<stdin>:12:11: error: inheritance from a final class 'Circle'
class Rectangle: Circle {
^
<stdin>:25:14: error: var overrides a 'final' var
override var radius: Double {
^
<stdin>:6:14: note: overridden declaration is here
final var radius = 12.5
当超类声明为 “final”和数据类型也被宣明为'final',程序将不允许再创建子类,否则它会引发错误。
注:相关教程知识阅读请移步到swift教程频道。








