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
*/
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
*/
相关文章推荐
- 【iOS】swift-如何理解 if let 与guard?
- 【iOS】swift-如何理解 if let 与guard?
- swift学习笔记之-类和结构体
- LeetCode 2. Add Two Numbers swift
- LeetCode 01 Two Sum swift
- Swift 使用代理和闭包(closure)反向传值
- OC和Swift中的static
- OC和Swift中的static
- Swift Control Flow控制流
- swift论坛正式上线
- swift2.0 UIImagePickerController 拍照 相册 录像
- 自学 iOS – 三十天三十个 Swift 项目
- Swift学习笔记:类和结构
- Swift-11-协议(Protocols)
- OC Block、Swift Closure以及C# Lambda的对比
- Swift学习之协议
- Swift学习之路05-类和结构体
- Xcode7.2 No such module 'Cocoa'问题
- swift附属脚本
- swift方法学习