Swift 中的关键字 final和super

本文介绍了Swift中的`final`和`super`关键字。`final`用于禁止类的继承以及防止类成员被重写,而`super`则用于在子类中访问父类的属性、方法和下标。通过`super.someProperty`、`super.someMethod()`和`super[someIndex]`可以调用父类的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

final 关键字

可以在定义类和类的成时使用 final 关键字 它的含义分别如下
  • 1、在关键字class 前添加 final (修饰符) 可以将整个类标为 final ,这个样的类不可以被继承,视图继承这样的类会编译报错
final class Person {

 }
 class Stu : Person {  //编译报错 error: inheritance from a final class 'Person'

 }
  • 2.在类的定义中将方法、属性、下标脚本标记为 final 可以防止它们被重写。只需要在声明关键字前加上 final 修饰即可
class Person {

    final var name : String?

    final func play() {
        print("------")
    }
    final class var age : Int {
        return 18
    }
    final class func run() {
        print("******")
    }
}
class tech : Person {

    override var name : String?  //error: expected declaration

    override func play() {  
    //error: instance method overrides a 'final' instance method
    }

    override class var age : Int { 
    //error: class var overrides a 'final' class var
       return 20
    }

    override class func run() { 
    //error: class method overrides a 'final' class method

    }   
}

super 关键字

当子类中重写父类中的方法,属性或者下标脚本,有时在重写版本中使用已经存在的父类实现会大有益处,比如,可以完善已经实现的行为,或者在一个继承来的变量中存储一个修改过的值,访问父类的成员使用的是 super 前缀,

super 的用处

  • 1、访问父类的属性,在属性的getter和setter的重写中实现,可以通过 super.someProperty 来访问父类版本的
    someProperty

  • 2、访问父类的方法,在方法 someMethod()的重写实现中 可以通过 super.someMethod()来调用父类版本的someMethod()

  • 3、访问父类的下标脚本,在下标脚本的重写实现中,可以通过 super[someIndex] 来访问父类版本中的相同下标脚本

class Animal {

    var age = 10
    // 使用Static 修饰的静态属性不能被子类重写
    static var weight : Double = 20

    static func play() {
        print("玩")
    }

    class var height : Double {
        return 30
    }

    func run() {
       print("动物在跑")
    }
    class func eat() {
        print("动物在吃")
    }

}
class Dog : Animal {


    /*
     override static var weight : Double {

     get{
     return 80
     }
     set{

     }
     }
     */

    //error: cannot override static method
    /*
     override static func play() {

     }
     */
    //error: cannot override static method

    override var age: Int {
        get {
          return super.age + 10
        }
        set {
          super.age = newValue - 5
        }
    }

    override class var height : Double {

        get {
          return super.height + 30
        }
        set {
        }
    }

    override func run() {
       super.run()
       print("狗在跑")
    }
    override class func eat() {
        super.eat()
        print("狗在吃")
    }
}

Dog.eat()
Dog.height

let dog = Dog()
dog.run()
dog.age
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值