澳门永利234555com一个类可以从另一个类继承方法、属性和其他的风味,斯威夫特的类可以调用和做客超类的法门、属性和下标

一个类可以从另一个类继承方法、属性和其他的特性,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 )。