Object c 繼承重寫多態

本節學習內容:

1.繼承的概念

2.子類重寫父類的方法

3.父類指針指向子類對象

4.多態實現


【main.m】

#import<Foundation/Foundation.h>

#import "Student.h"

#import "Teacher.h"

#import "Hander.h"

#import "Rabbit.h"

#import "Cat.h"

#import "Dog.h"

/*重寫:子類重新實現從父類繼承的方法

//從父類繼承的方法不適合子類,子類通常重寫父類的方法*/

/*多態:對不同對象,發送相同的消息,有不同的響應*/

int main(int argc,const char*argv[]){

@autoreleasepool{

Student *xiaoming=[[Student alloc]init];

xiaoming.name=@"小明";

xiaoming.age=12;

xiaoming.num=10;

xiaoming.score=99;

[xiaomeng printInfomation];

/*打印結果:

重寫前 name=小明 age=12

重寫后 ?name=小明 age=12 num=10 ?score=99

*/

//NSLog 自動調用descripion方法

NSLog(@"%@',xiaoming);

/*打印結果:重寫前 ?name=xioaming age=12

重寫后? name=小明 age=12 num=10? score=99

*/

//先從了類對象中查找方法的實例,如果子類中沒有實現對應的方法,則到父類中查詢方法的實現

Teacher *MrWang=[[Teacher alloc]init];

MrWang.name=@"王老師";

MrWang.age=30;

MrWang.place=@‘上海浦東’;

MrWang.weight=70

NSLog(@"%@",MrWang);

/*打印結果:name=王老師 age=30 place=上海浦東 weight=70.*/

//將xiaoming對像保存在Person對像指針中

Person *per=XiaoMing;

//仍是調用的Student類的description方法

//父類的指針可以指向子類的對象,調用的方法實現,根據對象本身類型決定

NSLog(@"per----%@",XiaoMeing);

/*打印結果:per--- name=小明 age=12 num=10? score=99*/

per=MrWang;

NSLog(@"per----%@",MrWang);

/*打印結果:per--- name=小明 age=12 num=10? score=99*/


//多態

Rabbit *rabbit=[[Rabbit alloc]init];

Cat *xiaoTom=[[Cat alloc]init];

Dog *xiaobai=[Dog allock]init];

Hander *xiaoHua=[[Hander alloc]init];

[xiaoHua askAnimalFood:rabbit];

/*打印結果: 類名:rabbit

rabbit like to eat carberage!!

*/

[xiaoHua askAnimalFood:xiaoTom];

/*打印結果: 類名:Cat

cat like to eat fish!!

*/

[xiaoHua askAnimalFood:xiaobai];

/*打印結果: 類名:Dog

Dog like to eat bone!!

*/


}

return 0;

}


【person.h】

#import<Foundation/Foundation.h

@interface Person:NSObject{

NSString *_name;

NSIneter _age;

}

@property(nonatomic,copy) NSString *name;

@roperty(nonatomic,assign) NSInteger age;

-(voidPprintInfomation;

@end


【person.m】

#import"person.h"

@implementation Person

-(void)printInfomation{

NSLog(@"name=%@ age=%li",_name,_age);

}

//描述類的實例的方法

-(NSString *)description

{

//返回一個字符串

return[NSString stringWithFormat:@"name=%@ age=%li',_name,_age];]

}

@end



【Student.h]

#import"Person.h"

//student類繼承Person類

@interface Student:Person{

NSInteger _num;//編號

NSInteger _score;//分數

}

@property(nonatomic,assign)NSInteger num;

@property(nonatomic,assign) NSInteger scorel;

@end


【Student.m]

//在子類中重寫父類繼承過來的方法,不需求在子類繼續聲明

-(void)printInfomation{

NSLog(@"name=%@ age=%li num=%li score=%li',_name,_age,_num,_score);

}

//重寫description

-(NSString *)description

{

//返回一個字符串

return[NSString stringWithFormat:@"name=%@ age=%li,num=%li,socre=%li',_name,_age,_num,_score];]

}

@end


【Teacher.h】

#import"Person.h"

@interface Teacher:Person{

NSString *_place;//工作地點

float _weight;

}

@property(nonatomic, copy)NSStrig *place;

@property(nonatomic, copy)NSInteger weight;

@end


【Teacher.m】

#import "Teacher.h'

@implementation Teacher

-(NSString *)description{

return[NSString stringWithFormat:@"name=%@ age=@li place=%@ weight=%.2f", _name, _age, _place, _weight];

}


【Animal.h】

#import<Foundation/Foundation.h>

@interface Animal ?: NSObject

-(void)showAnimalFood;


【Animal.m】

#implementation Animal

-(void)showAnimalFood{

NSLog(@"類名:%@',[self class]);//class獲取對象所在的類名;

NSLog(@"---------------------------------------');

}

@end


【Dog.h】

//繼承anmial類


【Dog.m】

#import"Dog.h"

@implementation Dog

//重寫showAnimalFood

-(void)showAnimalFood{

NSLog(@"類名:%@",[self class]);

NSLog(@"Dog ?like to eat bone!!“);

}


【Cat.h】

//繼承anmial類


【Cat.m】

#import"Cat.h"

-(void)showAnimalFood{

NSLog(@"類名:%@",[self class]);

NSLog(@"cat?like to eat fish!!“);

}


【Rabbiit.h】

//繼承anmial類


【Rabbit.m】

#import"Rabbit.h"

-(void)showAnimalFood{

NSLog(@"類名:%@",[self class]);

NSLog(@"cat?like to eat ?carberage!!“);

}


【Handder.h】

#import<Fondation/Foundation.h>

@interface Handder: NSObject

-(void)askAnimalFood:(Animal *)ani;

@end


【Handder.m】

#import "Habder"

-(void)askAnimalFood:(Animal*)ani{

[ani showAnimalFood];

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容