一 继承概念
在定义一个新的OC类时,只要用":"符号表明要继承的是哪一个类,就可以从中继承来许多东西,当新定义的类中还可以根据需要添加更多的变量和方法。新定义的类称为子类或派生类,被继承的类称为父类或者超类。
所有的类都是通过直接或者间接地继承NSObject类得到的。子类不能继承父类中作用域限定为@private的成员变量
注:在OC中,类的继承只能是单继承,而多继承可以通过遵从多个协议实现。也就是说,在OC中,一个类只能继承一个父类,但可以遵从多个协议。
二 方法重写
子类方法与父类方法名相同,子类就会重写或者覆盖(override)父类的方法。
三 多态概念
多态性是指在父类中定义的方法被子类继承后,可以具有不同的表现出行为。这使得同一个方法在父类及其各个子类中具有不同的变现行为。例如:几何图形类的绘图方法,在它的子类椭圆形和三角形中也会有绘图的方法,但是绘图方法功能都不同。
四 id类型
id是泛类型(generic data type),可以用来保存各种对象指针,使用id也就是使用“动态类型”
id figure;
figure = [[Ellipse alloc] init];
[figure onDraw];
figure = [[Triangle alloc] init];
[figure onDraw];
动态类型(Dynamic typing)就是指,对象实际使用的是哪一个类是在执行期间才确定的,而非在编译期间。
把Figure *改成id类型,程序运行结果没有任何影响。由于动态类型的关系,id在执行时,OC的执行环境会找出该id所代表的原来类型,所以根本没有所谓的转型。id并不是自动的转换成Elllipse和Triangle的父类,而是在执行期间,由执行环境辨认出id实际代表的类型为Ellipse和Triangle。
提示:虽然id类型可以任何类型的对象,但不要滥用,如果能够确定对象数据类型的时候,要使用“静态类型”,“静态类型”在编译阶段检查错误,而不是在运行阶段。而且“静态类型”程序可读性好。