一、继承
1.概念:程序里的继承子类继承了父类,那么子类就拥有父类中的所有成员变量和方法,这跟现实中的狗是动物的一种,狗也具备了动物 所必备的属性,更符合我们的理解。
2.继承的好处与缺点:
1>抽取出了重复的代码
2>建立了类和类之间的联系
继承的缺点:耦合性太强
3.继承的实例
@interface Animal:NSObject
// 动物里继承了NSObject,获得NSObject类的方法;
{
int _age;
int _weight;
}
// setter和getter
......
@end
@interface Dog :Animal
// dog类继承Animal类,并获得了父类的所有方法和属性
@end
原理图
注意:OC语言是单继承语言。在oc语言中,基本上所有类的根类都是NSObject类。
二、继承与组合
继承的适用场合:
1>当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中。
2>当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合。
继承:xx是xxx,如狗是动物,可以让狗继承动物类
组合:XXX拥有xxx,如学生有书,可以让书这个类作为学生类的属性
三、重写和super
1.重写概念:子类重新实现父类中的某个方法(对某个方法重新实现),覆盖父类某个方法以前的做法。
2.使用场合:
1>当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
2>当A类有用B类中的部分属性和方法时,可以考虑让B类继承A类。
3. super用法:子类调用父类中的某个方法
super处于对象方法中时,那么就会调用父类的对象方法
super处于类方法中时,那么就会调用父类的类方法
使用场合:子类重写父类的方法时想要保留父类的一些行为
(子类可以直接调用父类中的某个方法 [super 方法名])
4. super重写方法
- (void)walk // 重写父类的walk方法
{
NSLog("跳两下");
[super walk]; // 调用父类的walk方法
}
四、多态
1.基本概念
多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。
在使用多态是,会进行动态检测,以调用真实的对象方法。
多态在代码中的体现即父类指针指向子类对象。
2.代码体现
Animal *a=[dog new];//Animal是父类,dog是子类 , 狗是动物
错误写法:Dog *d=[Animal new]; // 动物不一定是狗,也可能是猫
3.优缺点
优点:节省了代码,提高了效率。
如果方法或函数参数中使用的是父类类型,则可以使用父类指针传入父类和子类对象。
void feed(Animal *a) // 定义喂动物的函数。
{
[a eat];
}
解析:上述函数的形参是父类Animal,所以此函数可以传入父类和子类。
局限性:
父类类型的指针不能调用子类的方法。(必须将父类指针强制转化为子类指针时才能调用子类中方法)
Animal *a=[dog new];
Dog *d = (dog *) a; // 将父指针a强制转化为子类指针d