1、值类型(枚举、结构体)不支持继承,只有类支持继承。
final class Animal {
func speak(){}
class func Run() {}
static func Test(){}
}
- 类被关键字final修饰后,就不会被任何类继承
2、子类可以重写父类的下标、方法、属性,重写必须添加上overide关键字
一、重写方法
class Animal {
func speak(){}
class func Run() {}
static func Test(){}
}
class Dog: Animal {
override func speak() {
print("重写父类的实例方法")
}
override class func Run() {
print("重写父类的类型方法")
}
}
let d = Dog()
d.speak()
- 1、被class修饰的类型方法、下标,允许被子类重写
- 2、被static修饰的类型方法、下标,不允许被子类重写
二、重写属性
2.1 实例属性
class Animal {
var name = "test"
}
class Dog: Animal {
override var name: String {
set{
super.name = newValue
}
get {
return super.name
}
}
}
let d = Dog()
print(d.name)
- 1、子类不可以将父类属性重写为存储属性,即使父类的属性是存储属性。
- 2、子类可以将父类的存储属性重写为计算属性,重写时,属性名、类型要一致。
2.2 计算属性
class Animal {
var age:Int {
set {
}
get {
return 10
}
}
}
class Dog: Animal {
override var age: Int{
set{
}
get{
return 20
}
}
}
let d = Dog()
2.3属性观察器
class Animal {
var age:Int = 10
var height:Float{
get {13.4}
set {}
}
}
class Dog: Animal {
override var age: Int{
didSet {
print(oldValue)
}
willSet {
print(newValue)
}
}
override var height: Float{
didSet {
print(self.height)
}
}
}
let d = Dog()
d.age = 11
d.height = 20
print(d.age)
- 可以在子类中为父类属性(除了只读计算属性、let属性),增加属性观察器
网友评论