1.继承的定义
值类型(枚举,结构体)不支持继承,只有类支持继承。
没有父类的类称为基类。子类可以重写父类的下标,方法,属性,重写必须加入override关键字。
例子:
class Animal {
var age = 0
}
class cat: Animal {
var wedight = 0
}2.重写实例(类型)下标和方法
例子:
class Animal {
func sleep() {
print("Animal sleep")
}
class func eat(){
print("Animal eat")
}
subscript(index: Int) -> Int{
get {
return index
}
}
}
class Cat: Animal {
override func sleep() {
print("Cat sleep")
}
override class func eat() {
print("Cat eat")
}
override subscript(index: Int) -> Int {
get {
return index + 1
}
}
}
3.重写属性
- 子类可以将父类的属性重写为计算属性。
- 子类不可以将父类的属性重写为存储属性。
- 只能重写var属性,不能重写let属性。
- 重写时,属性名和类型保持一致。
- 子类的权限要大于父类的权限。
- 被static修饰的类型属性不可以被子类重写。
例子:
class Circle {
var radius: Int = 0
var diameter: Int {
set {
radius = newValue / 2
}
get {
return radius * 2
}
}
}
class SubCircle: Circle {
override var radius: Int {
set {
super.radius = newValue
}
get {
return super.radius
}
}
override var diameter: Int {
set {
super.diameter = newValue
}
get {
return super.diameter
}
}
}4.属性观察器
在子类中,可以为父类属性添加属性观察器。
例子:
class Circle {
var radius: Int = 0
var diameter: Int {
set {
radius = newValue / 2
}
get {
return radius * 2
}
}
}
class SubCircle: Circle {
override var radius: Int {
willSet {
print("radius willSet",newValue)
}
didSet {
print("radius didSet",oldValue,radius)
}
}
override var diameter: Int {
willSet {
print("diameter willSet",newValue)
}
didSet {
print("diameter willSet",oldValue)
}
}
}
5.final
- 被final修饰的方法,下标,属性,禁止重写
- 被final修饰的类,禁止重写
上一篇文章:swift从入门到精通10-下标
下一篇文章:swift从入门到精通12-初始化