Swift学习笔记2---继承(Inheritance)

  • 在Swift中,继承是区分【类】与其他类型的一个基本特征。
  • 不继承于其它类的类,称之为基类(base calss)。

  • 子类生成(Subclassing)指的是在一个已有类的基础上创建一个新的类。子类继承超类的特性,并且可以优化或改变它。你还可以为子类添加新的特性。

  • 子类可以为继承来的实例方法(instance method),类方法(class method),实例属性(instance property),或下标脚本(subscript)提供自己定制的实现(implementation)。我们把这种行为叫重写(overriding)。

  • 你可以通过把方法,属性或下标脚本标记为final来防止它们被重写,只需要在声明关键字前加上final特性即可。(例如:final var, final func, final class func, 以及 final subscript)

 

//
//  main.swift
//  Inheritance
//  继承
//
//  Created by TSUBASA on 15/12/18.
//  Copyright © 2015年 TSUBASA. All rights reserved.
//

import Foundation

// 继承
/**
*  在Swift中,继承是区分【类】与其他类型的一个基本特征
*/

//base class 基类
class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) miles per hour"
    }
    
    func makeNoise() {
        // 什么都不做
    }
}



let someVehicle = Vehicle()
print("Vehicle: \(someVehicle.description)")

/**
*  子类
class SomeSubclass: SomeSuperclass {

}
*/

// 定义一个Vehicle的子类
class Bicycle: Vehicle {
    var hasBasket = false
}
let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")

// 子类还可被其他类继承,成为父类
// 双人自行车类 继承于 自行车类
class Tandem: Bicycle {
    var currentNumberOfPassengers = 0
}
let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \(tandem.description)")

// Overriding Methods 重写方法
class Train: Vehicle {
    override func makeNoise() {
        print("Choo Choo")
    }
}
let train = Train()
train.makeNoise()

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)")

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)")

/**
*  防止重写 Preventing Overrides
*/

// 使用final特性
// final var, final func, final class func, final subscript
// 如果重写了final方法,属性或下标属性,编译时不会报错。

// 也可以在类前加上final将整个类标记为final的,这样的类无法继承,任何试图继承此类,编译时会报错。

 

转载于:https://www.cnblogs.com/hemac/p/5058523.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值