解析Swift语言面相对象编程中的继承特性

2020-01-08 22:34:32于丽

当用户不需要让别人访问超类的方法,属性或下标,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教程频道。