
01.png

02.png
二、重写
1.重写类型方法
- 被
class修饰的类型方法,允许被子类重写;- 被
static修饰的类型方法,不允许被子类重写。class Animal { class func speak() { print("Animal speak") } } class Cat: Animal { override class func speak() { print("override speak") } }
![]()
03.png
问:父类用class修饰,子类用static重写可以么?
例子:
![]()
04.png
答:可以。因为不管是通过class还是static来修饰,都代表类型方法,本质是不变的,但是会影响自己的子类,自己的子类不可以再次重写了。如下图所示:
![]()
05.png
2.重写实例属性
子类可以将父类的属性( 存储、计算 )重写为【计算属性】。
![]()
08.png
子类不可以将父类的属性重写为【存储属性】。
![]()
06.png
![]()
07.png
- 只能重写var属性,不能重写let属性;
- 重写时,属性名,类型要一致;
- 子类重写后的属性权限,不能小于父类的属性权限;
- 如果父类属性是只读的,那么子类重写后的属性可以是只读的,也可以是读写的;
- 如果父类属性是可读写的,那么子类重写后的属性也必须是可读写的。
3.重写类型属性
- 被
class修饰的计算类型属性,可以被子类重写;- 被
static修饰的类型属性(存储,计算),不可以被子类重写。
![]()
09.png








评论列表