Objective-C_继承与多态
继承
什么是继承?
继承就是子类具有父类的行为特征,却不失自己独有的行为特征
注意:
1.继承具有传递性
2.继承需要符合的关系:is- a,注意这里的关系是不可逆的,单向的
3.子类具有父类的属性和行为,以及自身特殊的属性和行为,这意味着子类比父类更具体
4.几乎所有类都继承NSObject
继承的特点:
1.使用继承可以实现代码的复用,减少代码冗余
2.Objective-C中一个类可以继承另一个类,被继承的类称为父类或超类(基类),继承的类称为子类或派生类(孩子类)
3.子类可直接“拥有”父类中所有允许子类继承的属性和方法
4.子类可以改变父类中已有的方法,执行不同的代码实现
代码显示:
父类Pet
#import <Foundation/Foundation.h>
@interface Pet : NSObject
@property(nonatomic,strong)NSString *name;//昵称
@property(nonatomic)NSInteger age;//年龄
//进食
- (void)eat;
@end
子类Dog、Cat
#import "Pet.h"
@interface Dog : Pet
@property(nonatomic,strong)NSString *type;//自身属性,品种
- (void)bark;//狗叫
@end
#import "Pet.h"
@interface Cat : Pet
- (void)sleep;//睡觉方法
@end
Dog类.m就文件
#import "Dog.h"
@implementation Dog
//重写eat方法
- (void)eat
{
NSLog(@"%@ is a dog. a %@.It just likes bone",self.name,self.type);
[super eat];
}
- (void)bark
{
NSLog(@"wow,wow,wow");
}
@end
main.m文件
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Dog *dog = [Dog new];
dog.name = @"poppy";
dog.type = @"husky";
Cat *cat = [Cat new];
cat.name = @"kitty";
cat.age = 2;
//实现父类方法
[cat eat];
[dog eat];
//调用自身方法
[cat sleep];
[dog bark];
}
return 0;
}
多态
多态就是对于不同对象响应同一个方法时做出的不同反应
例子:
main.m就文件
#import <Foundation/Foundation.h>
#import "Dog.h"
#import "Cat.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
id animal = nil;//id万能指针
//animal指向Cat类的对象
animal = [Cat new];
[animal eat];
//animal指向Dog类的对象
animal = [Dog new];
[animal eat];
}
return 0;
}
同一方法,不同的对象的实现,结果可以不一样
多态的特点:
使用多态可以大大增强程序的可维护性和可扩展性