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;

}

 同一方法,不同的对象的实现,结果可以不一样

多态的特点:

使用多态可以大大增强程序的可维护性和可扩展性

posted @ 2015-09-17 11:47  Jimmy_Ng  阅读(246)  评论(0编辑  收藏  举报