您的位置:首页 > 移动开发 > Swift

swift继承

2016-01-22 09:24 267 查看
/**

1.定义一个基类

2.子类生成

3.重写

4.防止重写

一个类可以继承另一个类的方法,属性和其他特性,在swift中,继承是区分类与其他类型的一个基本特征

类可以调用和访问父类的方法,属性和附属脚本,并且可以重写这些方法,属性和附属脚本来优化或修改它们的行为。

也可以为类中继承来的属性添加属性观察器

*/

//定义基类

/**

不继承于其它类的类,称之为基类(base class)

swift中的类并不是从一个通用的基类继承而来,如果你不为你定义的类指定一个父类,这个类就自动成为基类

*/

class Vehicle {

var numberOfWheels:
Int;

var maxPassengers:Int;

func description() ->
String {

return
"\(numberOfWheels) wheels; up to
\(maxPassengers) passengers";

}

init() {

numberOfWheels =
0;

maxPassengers =
1;

}

}

//子类生成

/**

子类生成指的是在一个已有类的基础上创建一个新的类

class SomeClass: SomeSuperclass { //
类的定义

}

*/

class Bicycle: Vehicle {

//Override是重写:方法名称、参数个数,类型,顺序,返回值类型都是必须和父类方法一致的。它的关系是父子关系

override
init() {

super.init();

numberOfWheels =
2;

}

}

/**

子类只允许修改从父类继承来的变量属性,而不能修改继承来的常量属性

*/

//let a = Bicycle();

//print(a.numberOfWheels);

class Tandem: Bicycle {

override
init() {

super.init();

maxPassengers =
2;

}

}

let tandem = Tandem();

print("\(tandem.description())");

//重写(overriding)

/**

子类可以为继承来的实例方法、类方法、实例属性、或附属脚本提供自己定制的实现,这种行为叫重写

*/

//重写方法

class Car: Vehicle {

var speed: Double =
0.0;

override
init() {

super.init();

maxPassengers =
5;

numberOfWheels =
4;

}

override func description() ->
String {

return
super.description() +
";" + "traveling at
\(speed) mph";

}

}

let car = Car();

print(car.description());

//重写属性

/**

可以重写继承来的实例属性或类属性,提供自己定制的getter和setter,或添加属性观察器使重写的属性观察属性值什么时候发生变化

可以将继承来的只读属性重写成读写属性,但不能把读写属性重写成只读属性

如果在重写属性中提供stter,那么一定要提供getter。如果不想在重写版本中的getter里修改继承了的属性值,可以直接返回super,someProperty来返回继承来的值

*/

class SpeedLimitedCar:
Car {

override var speed:
Double {

get {

return super.speed;

}

set {

super.speed =
min(newValue, 40.0);//返回最小的数

}

}

}

let limitedCar = SpeedLimitedCar();

limitedCar.speed =
60.0;

print(limitedCar.description());

//重写属性观察器

class AutomaticCar:
Car {

var gear = 1;//档位

override var speed:
Double {

didSet {

gear = Int(speed /
10.0) + 1;

}

}

override func description() ->
String {

return super.description() +
"in gear \(gear)";

}

}

let automatic = AutomaticCar();

automatic.speed =
50.0;

print(automatic.description());

//防止重写

/**

可以通过把方法,属性或附属脚本标记为final来防止它们被重写,只需要在声明关键字前加上@final特性即可

@final func, @final class func, @final subscript, @final var

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: