类的继承

继承的语法格式:

@interface SubClass : SuperClass

{

//成员变量定义;

}

//方法定义部分

@end

继承的本质是子类继承父类,子类是一种特殊的父类,从这个意义上讲,使用继承描述子类和父类的关系是错误的,可能更适合用扩展来描述,因此这个说法更准确:苹果类扩展了水果类《Apple类扩展了Fruit类》

当子类扩展父类时,子类可以继承得到父类的如下东西:

1、全部的成员变量

2、全部的方法(包括初始化方法)

下方是程序演示:
类的继承_第1张图片

程序代码: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

类的继承_第2张图片

上方程序apple对象可以访问waiguan属性和方法property,这表明Apple也具有Fruit的属性和方法,这就是继承的作用。

OC中的继承是单继承,不是说OC 的类只有一个父类,而是只能有一个直接父类,实际上,OC类可以有无限多个间接的父类,NSObject是所有类的父类,直接的或者间接的,因此所有的OC对象都可以调用OC类所定义的实例方法,这也是我博客中写道的KVC/KVO时能正常调用那些方法的秘密。


二、重写父类的方法

子类扩展了父类,子类是一个特殊的父类,子类在父类的基础上再增加方法和成员变量,但是有一种特俗的情况就是父类的方法的内容并不适合子类,所以就要进行重写父类的方法。

例如:鸟类都包含了飞的方法,其中小鸡是一种特俗的鸟类,因此,小鸡是鸟的子类,他将获得飞翔的方法,但是飞翔方法明显不适合小鸡,所以,小鸡需要重写鸟类的方法。


当子类需要重写父类方法时,子类接口部分并不需要重新声明要重写的方法,只要在类实现部分直接重写该方法。

最后通过子类方法调用该方法时,执行的是重写完之后的内容。

这种子类包含于父类同名方法的现象被称为方法重写,也被称为方法覆盖,可以说,子类重写了父类的方法,也可以说子类覆盖了父类的方法。

方法重写必须注意方法签名关键字要完全相同,也就是方法名和方法签名中的形参标签都需要完全相同,否则就不能算是方法重写。


你可能感兴趣的:(ios,继承,Class,扩展)