美文网首页
Object c 继承重写多态

Object c 继承重写多态

作者: 奔跑的小小鱼 | 来源:发表于2017-04-05 21:05 被阅读17次

    本节学习内容:

    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];

    }

    相关文章

      网友评论

          本文标题:Object c 继承重写多态

          本文链接:https://www.haomeiwen.com/subject/ytpxattx.html