中类能够调用和访谈归属它们父类的艺术、属性和下标脚本,斯威夫特的类能够调用和做客超类的不二等秘书技、属性和下标

一个类可以从另一个类继承方法、属性和其他的特性,Swift的类可以调用和访问超类的方法、属性和下标

多个类能够从另二个类世襲方法、属性和别的的特征。当五个类从另二个类世襲的时候,世襲的类正是所谓的子
类,而那一个类世襲的类被誉为父类。在斯威夫特中,世袭与任何品种差异的底工分类行为。

继承

类能够从另三个类世襲方法、属性和其余特色,世袭类称为子类,被世襲类为其超类。Swift的类可以调用和拜会超类的措施、属性和下标,并能重写这几个本子以精雕细琢或涂改其一颦一笑。

类仍可以将质量阅览器增加到持续的属性,属性观望器能够增多到别的性质。

在 Swift中类可以调用和拜见归于它们父类的不二等秘书诀、属性和下标脚本,并且能够提供它们本身重写的情势,属性
和下标脚本来定义或退换它们的一言一行。Swift会通过检查重写定义都有一个与之合作的父类定义来保管您的重写是千真万确的。

概念基类

基类是不继续任何三个类的类。

注意

Swift类不会从通用基类世袭,未钦赐超类的自定义类自动成为基类。

以下为二个自定义Vehicle基类:

class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) miles per hour"
    }
    func makeNoise() {
        // do nothing - an arbitrary vehicle doesn't necessarily make a noise
    }
}

利用初阶化器语法成立一个类实例:

let someVehicle = Vehicle()

访问其description属性:

print("Vehicle: \(someVehicle.description)")
// Vehicle: traveling at 0.0 miles per hour

类也得以向世袭的属性增多属性观看器,以便在性质的值改变时拿到公告。能够增加任何性质量监督视到属性中,不
管它是被定义为存款和储蓄还是精打细算属性。

子类化

子类化是将三个新类置于现成类之上的表现,子类世襲现成类的天性,也得以向子类增添新特征。

连续语法如下:

class SomeSubclass: SomeSuperclass {
    // subclass definition goes here
}

子类化Vehicle类:

class Bicycle: Vehicle {
    var hasBasket = false
}

let bicycle = Bicycle()
bicycle.hasBasket = true

bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")
// Bicycle: traveling at 15.0 miles per hour

子类继续子类化:

class Tandem: Bicycle {
    var currentNumberOfPassengers = 0
}

let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \(tandem.description)")
// Tandem: traveling at 22.0 miles per hour

概念叁个基类

别的不从另叁个类世襲的类都以所谓的基类

一贯不点名特定父类的类都会以基类的样式创设。

重写

子类能够提供自定义的从超类世袭来的实例方法、类型方法、实例属性、类型属性或下标,称为重写。

使用override第一字重写超类的特色,未有根本字的别的重写会促成编写翻译错误。

子类

子类是依据现存类成立新类的作为。子类从现存的类世袭了部分特性,你能够再一次定义它们。你也可以为子类增添新的表征。

为了评释子类有父类,要把子类写在父类的前方,用冒号分隔:

1   class SomeSubclass: SomeSuperclass {
2       // subclass definition goes here
3   }

子类本人也足以被一连。

寻访超类方法、属性和下标

当子类重写方法、属性或下标时,能够将长存超类的实现用作重写的意气风发有的,即在超类完毕根基上海重机厂写。这时候使用super前缀访谈方法、属性或下标的超类版本:

  • 名为someMethod()的重写方法能够通过在重写方法达成中调用super.someMetho()来调用someMethod()的超类版本。

  • 被称为someProperty的被掩瞒的品质能够在最棒的gettersetter兑现中以super.someProperty情势访问someProperty的超类版本。

  • someIndex的覆盖下标能够从覆盖的下标完成中访谈与super
    [someIndex]
    如出后生可畏辙的下标的超类版本。

重写

子类能够提供它本身的实例方法、类型方法、实例属性,类型属性或下标脚本的自定义达成,不然它将会从父类世袭。那就所谓的重写。

要重写实际不是世襲叁个风味,你要求在你的重写定义后面加上
override关键字。

办法重写

可以重写世袭的实例或项目方法来提供子类中定制或代表方式的秘诀。

class Train: Vehicle {
    override func makeNoise() {
        print("Choo Choo")
    }
}

let train = Train()
train.makeNoise()
// Prints "Choo Choo"

做客父类的艺术、属性和下标脚本

你能够透过接收 super前缀访谈父类的办法、属性或下标脚本

性格重写

能够重写世襲的实例或项目属性,为该属性提供自定义gettersetter,或增添属性旁观器以启用重写属性来观望底层属性值何时转移。

重写方法

您能够在您的子类中重写一个无冕的实例或项目方法来提供定制的或代表的措施实现。

1  class Train: Vehicle {
2      override func makeNoise() {
3           print("Choo Choo")
4      } 
5  }

getter和setter属性重写

能够提供自定义的getter(和setter)来覆盖任何世袭的质量,必得一贯宣称要隐蔽的属性名和类型,以便编写翻译器检查重写是或不是与富有同名同类型的超类属性相称。

可以为超类的只读属性的重写同一时间提供gettersetter改正为读写属性,但不能够将超类的读写属性重写为只读属性。

注意

当重写属性提供了setter时,还非得提供getter。若不想覆盖getter改革世袭属性的值,可以从getter中返回super.someProperty以保全超类属性的getter实现。

以下为子类重写超类description品质并在超类完毕根基上增添新职能:

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
print("Car: \(car.description)")
// Car: traveling at 25.0 miles per hour in gear 3

重写属性

你能够重写二个继承的实例或项目属性来为你协调的天性提供你本人自定义的
getter 和 setter ,或然增多属性观看器确认保障当底层属性值改动时来监听重写的性质。

天性观望珍视写

重写属性会讲超类的习性观看器增多到持续的习性,无论该属性的达成格局怎么样都将能够在继承属性的值改正时收到布告。

注意

无法将品质观望器加多到后续的常量存储型属性或只读计算型属性,因为那些属性值不可能校正。不能为同朝气蓬勃属性同期提供重写的setter和重写的属性阅览器,若要监听属性值的退换,而且已经提供重写的setter,则足以回顾地监听重写的setter中任何值的改动。

class AutomaticCar: Car {
    override var currentSpeed: Double {
        didSet {
            gear = Int(currentSpeed / 10.0) + 1
        }
    }
}

let automatic = AutomaticCar()
automatic.currentSpeed = 35.0
print("AutomaticCar: \(automatic.description)")
// AutomaticCar: traveling at 35.0 miles per hour in gear 4

重写属性的getter和setter

您可以因而在您的子类重写里为三番三次而来的只读属性增多Getter和Setter来把它看成可读写属性。简单的说,你不可能把
三个三番伍遍而来的可读写属性表示为只读属性。

严防重写

因此将艺术、属性或下标标识为final防御被子类重写,如final
var
final funcfinal class funfinal subscript

此外交政准备在子类中重写标志为final的不二法门、属性或下标都将报告编译错误,也可以在扩张中应用final关键字。

能够在类定义中的class重大字以前增进final修饰符防止此类被子类化,任何盘算子类化标识为final的类都将告诉编写翻译错误。

重写属性观察器

你可以接纳品质重写来为世襲的属性增添属性观看器。
注意:

您不能够给后续而来的常量存储属性大概只读的估测计算属性增添属性旁观器。那几个属性的值无法被设
置,所以提供 willSet 或 didSet 实现作为重写的豆蔻梢头有的也是不对劲的。

也要当心你不能够为同二个属性相同的时候提供重写的setter和重写的属性观望器。假令你想要监听属性值
的改进,何况你曾经为特别属性提供了八个自定义的setter,那么你从自定义的setter里就可以监听

阻止重写

你能够经过标识为终带给堵住三个方式、属性只怕下标脚本被重写。通过在情势、属性恐怕下标脚本的根本字前
final 修饰符(比如 final var , final func , final class func ,
fianl subscript )。