Swift学习43:继承

张建 lol

前言

  • swift中,只有类支持继承
  • swift中 类没有统一的基类
  • 没有继承任何父类的类是基类,但其实它是有一个父类的,叫 _SwiftObject
  • final 修饰的 属性、方法、下标 禁止被 重写,禁止被 继承

定义基类

  • 不继承任何类的类是 基类

  • 没有指定特定的父类的类都以基类的形式创建

示例

1
2
3
4
5
6
7
// 基类
class Person {
var name: String = "ZJ"
func test() {
print("hello")
}
}

子类

  • 子类 是基于 父类 创建的新类

  • 子类写在父类前面,用 : 分割

1
2
3
class Teacher: Person {

}

重写

  • 子类可以定义自己的 属性、方法、下标 及其他的特征,可以从 父类继承,就是所谓的 重写
  • 子类可以 继承 父类的 属性、方法、下标,前面加 override 关键字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 基类
class Person {
var name: String = "ZJ"
var desc: String{
return name
}
}
// 子类
class Student: Person {
// 继承父类的属性
override var desc: String{
return super.desc + "hello"
}
}
let s = Student()
print(s.desc)

=====
ZJ hello

访问父类的 属性、方法、下标

  • 通过使用 super 前缀访问父类的、属性、方法、下标脚本

super.someMethod() 重写父类的方法
super.someProperty 重写父类的属性
super[someIndex] 重写父类的下标脚本

重写方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 父类
class Person {
// 实例方法
func test() {

}
}
// 子类 Teacher 继承 Person 父类
class Teacher: Person {
// 子类重写父类的 test() 方法,用 override 关键字
override func test() {
print("呜呼!")
}
}
let t = Teacher()
t.test()

======
呜呼!

重写属性的getter和setter方法

可以自定义一个gett或setter来重写父类继承的属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Person {
var desc: String = "ZJ"
}
class Teacher: Person {
var age: Int = 0
override var desc: String {
return super.desc + "is \(age)"
}
}
let t = Teacher()
age = 32
print(t.desc)

======
ZJ is 32

重写属性观察器

  • 可以为继承的属性添加属性观察器

  • 不可以为继承的 常量存储属性只读的计算属性 添加属性观察器

  • 不能为同一个属性同时提供重写 setter和属性观察器

禁止重写

  • 可以用 final 关键字禁止被 继承
  • 禁止继承属性: final var(变量属性)、final let(常量属性)
  • 禁止继承方法:final func(实例方法)、final class(类方法)、
  • 禁止继承下标:final subscribe(下标)
  • Post title:Swift学习43:继承
  • Post author:张建
  • Create time:2023-03-09 20:33:59
  • Post link:https://redefine.ohevan.com/2023/03/09/Swift课程/Swift学习43:继承/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.