• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift基础语法:30-Swift的基类,子类,重写,重写方法,重写属性,防止重写 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前面我们讲了有关于脚本语法的基本认识以及使用, 现在让我们来看看Swift的其他东西:


1.基类

所谓的基类, 就是OC中的父类, 不继承任何类, 就叫做基类, 让我们来看看例子:

class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) miles per hour"
    }
    func makeNoise() {

    }
}

let someVehicle = Vehicle()
println("someVehicle: \(someVehicle.description)")
// 打印出来的结果: someVehicle: traveling at 0.0 miles per hour

PS: 这个类虽然是没有什么意义, 但它的的确确是一个基类, 在Swift中, 如果你没有在这个类名后面继承与什么什么类, 那么就会自动的变成基类.


2.子类生成

所谓的子类, 其实和OC中的子类一样的, 它是基于基类所新建的一个类, 这个类就叫做子类, 它拥有父类的所有特性, 同时它又可以有属于自己的特性, 下面让我们来看看例子:

class Bicycle: Vehicle {
    var hasBasket = false
}

let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15
println("bicycle: \(bicycle.description)")
// 打印出来的结果: bicycle: traveling at 15.0 miles per hour

PS: 上面的例子就是Vehicle类的子类, 它继承与Vehicle的所有特性, 可以调用Vehicle类里面的变量, 方法,等等, 同时它又有自己的属性.


3.重写方法

在子类中, 虽然拥有父类的所有特性, 但在实际开发中, 有一些特殊的情况, 父类的方法不能满足于子类的需求, 但我们又不想去更改父类的方法, 那么我们可以选在在子类里去重写父类的方法, 比如:

class Car: Vehicle {
    var gear = 1
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}

let car = Car()
car.currentSpeed = 25.0
car.gear = 3
println("Car: \(car.description)")
// 打印出来的结果: Car: traveling at 25.0 miles per hour in gear 3

PS: 没错, 有些眼睛犀利的朋友就看到了, 在Car这个子类里, 有一个方法名和父类的方法名是一样的, 但在这个方法名前面, 加了一个override这个关键字, 这个就是Swift中的重写关键字.


4.重写属性

在Swift中, 既然能重写父类的方法, 那当然也是可以重写父类的属性了, 让我们来看看例子:

class SpeedLimitedCar: Car {
    override var gear: Int {
        get {
            return super.gear
        }
        set {
            super.gear = 2
        }
    }
}
let limitedCar = SpeedLimitedCar()
limitedCar.gear = 60

println("SpeedLimitedCar: \(limitedCar.gear)")
// 打印出来的结果: SpeedLimitedCar: 2

PS: 这里需要注意一点的就是, 必须通过get和set这种特性的方式来重写父类的属性.


5.防止重写

在上面的例子中, 如果我有某个类的属性或者方法不想被重写, 只要在基类定义的时候在前面加一个final关键字就可以防止被重写, 下面让我们来看看例子:

class Car: Vehicle {
    final var gear = 0
    final override var description: String {
        return super.description + " in gear \(gear)"
    }
}

class SpeedLimitedCar: Car {
    override var description: String {
        return "重写了"
    }
    override var gear: Int {
        get {
            return super.gear
        }
        set {
            super.gear = 2
        }
    }
}
// 报错: Var overrides a 'final' var


好了, 这次我们就讲到这里, 下次我们继续~


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift类和对象发布时间:2022-07-13
下一篇:
iOS、swift、ReactNative学习常用的社区、论坛发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap