继承的语法格式:
@interface SubClass : SuperClass
{
//成员变量定义;
}
//方法定义部分
@end
继承的本质是子类继承父类,子类是一种特殊的父类,从这个意义上讲,使用继承描述子类和父类的关系是错误的,可能更适合用扩展来描述,因此这个说法更准确:苹果类扩展了水果类《Apple类扩展了Fruit类》
当子类扩展父类时,子类可以继承得到父类的如下东西:
1、全部的成员变量
2、全部的方法(包括初始化方法)
程序代码:Fruit.h
// // Fruit.h // 类的继承 #import <Foundation/Foundation.h> @interface Fruit : NSObject @property(nonatomic,copy)NSString *waiguan; -(void)property; @end程序代码:Fruit.m
// Fruit.m // 类的继承 #import "Fruit.h" @implementation Fruit @synthesize waiguan; -(void)property { NSLog(@"我的属性是%@",waiguan); } @end
上方程序apple对象可以访问waiguan属性和方法property,这表明Apple也具有Fruit的属性和方法,这就是继承的作用。
OC中的继承是单继承,不是说OC 的类只有一个父类,而是只能有一个直接父类,实际上,OC类可以有无限多个间接的父类,NSObject是所有类的父类,直接的或者间接的,因此所有的OC对象都可以调用OC类所定义的实例方法,这也是我博客中写道的KVC/KVO时能正常调用那些方法的秘密。
二、重写父类的方法
子类扩展了父类,子类是一个特殊的父类,子类在父类的基础上再增加方法和成员变量,但是有一种特俗的情况就是父类的方法的内容并不适合子类,所以就要进行重写父类的方法。
例如:鸟类都包含了飞的方法,其中小鸡是一种特俗的鸟类,因此,小鸡是鸟的子类,他将获得飞翔的方法,但是飞翔方法明显不适合小鸡,所以,小鸡需要重写鸟类的方法。
当子类需要重写父类方法时,子类接口部分并不需要重新声明要重写的方法,只要在类实现部分直接重写该方法。
最后通过子类方法调用该方法时,执行的是重写完之后的内容。
这种子类包含于父类同名方法的现象被称为方法重写,也被称为方法覆盖,可以说,子类重写了父类的方法,也可以说子类覆盖了父类的方法。
方法重写必须注意方法签名关键字要完全相同,也就是方法名和方法签名中的形参标签都需要完全相同,否则就不能算是方法重写。