首页 > 编程语言 > 详细

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

时间:2015-12-19 01:21:37      阅读:316      评论:0      收藏:0      [点我收藏+]
  • 在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的,这样的类无法继承,任何试图继承此类,编译时会报错。

 

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

原文:http://www.cnblogs.com/hemac/p/5058523.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!