1. 除了前面学习的关于枚举、结构体和类的基本语法外,Swift也很好地支持面向对象的三大特征:封装、继承和多态。(只有类才支持继承和多态)
2. Swift中的扩展和协议等也是重要的内容。Swift中的协议相当于Java语音中的接口的概念,协议体现了多个类必须遵守的规范。而且协议与委托是iOS开发的重要内容。
一.继承
1. Swift中继承同Java中一样,是单继承,每个类只有一个直接父类。
2. 继承的语法: class子类名 :父类名{}
3. 子类继承父类后,可以从父类那里得到属性、方法、下标、构造器(构造器比较特殊,并一定总会通过继承得到)。
4. 如果子类对继承父类得到的属性、方法和下标等不满意,也可以重写父类的属性、方法和下标。
5. 与Objective-C、Java等语言不同,Swift的类并不是从一个通用的基类继承而来的,如果不显式地为一个类指定父类,那么该类就没有父类——它并不继承NSObject或Object类。
6. 重写父类的方法:子类重写父类的方法时,在方法名前面一定要用override修饰。----Java中以注解的方式使用override
7. 当子类覆盖了父类的方法后,子类的实例将无法访问父类中被覆盖的方法,但可以在子类的方法中调用父类中被覆盖的方法。调用时,使用super作为限定来调用父类中被覆盖的方法。
8. 重写父类的属性:重写属性时同样需要使用关键字override,要将override放在属性的var的左边。
9. 子类并不知道继承得到的属性是存储属性还是计算属性,子类只知道得到属性的名字和类型。因此当子类重写父类的属性时,必须将属性的名字和类型都写出来就,以便于编译器检查子类到底重写了父类的哪个属性。
10. 重写父类的属性时,可以将父类的只读属性改写为读写属性----只要添加一个setter方法即可。但是不能将父类中的读写属性重写为只读属性。
11. 重写属性观察者:重写属性时还可以为继承来的属性重写或添加属性观察者。
12. 重写属性观察者时,不要同时添加setter方法和属性观察者。因为如果程序提供了setter方法,那么程序本身就是通过setter方法来改变属性的,自然就不需要属性观察者了。
13. Swift也允许重写继承得到的下标。同样需要将override关键字放在定义下标的左边。
14. 重写下标时,可以将父类中的只读下标改写为读写下标。但是不可以将读写下标重写为只读下标。
15. 使用final关键字防止重写:final关键字可用于修饰类、属性、方法和下标。使用final修饰的类不能被继承、派生子类。使用final修饰的属性、方法、下标不能被重写。
16. 与Java中不同的是,在Swift中final不能修饰方法中的局部变量,final也不能修饰全局变量。
17. 合理地使用final可以将类或类中的部分实现保护起来,从而避免了被子类破坏。