zoukankan      html  css  js  c++  java
  • Objective-c继承与组合

    Objective-C 继承

       继承:是一种XXX是XXX的关系。例如:学生是人,所以学生与人就是继承的关系。

    #import <Foundation/Foundation.h>

    @interface Person : NSObject

    {

        int _age;

        int _weight;

    }

    - (void) run;

    + (void)eat;

    @end

    @implementation Person

    - (void) run

    {

        NSLog(@"人在跑");

    }

    + (void)eat

    {

        NSLog(@"人在吃东西");

    }

    @end

    @interface Student : Person

    {

    //    int _age;

         /*

         子类不可以存在与父类一样的成员变量,若存在会出现编译不通过。

         报错: 01-继承与组合.m:31:9: error: duplicate member '_age'

         */

        

    }

    @end

    @implementation Student

    //我们重写父类的方法,由于父类应经声明了run方法,我们在interface中可以不进行声明,直接重写方法。

    -(void) run

    {

        NSLog(@"学生在跑");

    }

    + (void)eat

    {

        NSLog(@"学生在吃东西");

    }

    @end

    int main()

    {

       Student *stu   =  [Student new];

       [stu run]; // 因为学生继承了人因此就可以调用父类中的run方法

        /*

         1.调用父类的run方法的输出

         2015-06-14 22:39:49.455 a.out[723:23152] 人在跑

         2. 重写父类的run方法输出

         2015-06-14 22:41:13.119 a.out[727:23856] 学生在跑

        */

        [Person eat]; //调用父类的类方法。输出:2015-06-14 22:45:08.256 a.out[746:25640] 人在吃东西

        [Student eat];

        /*

         1.调用未重写父类的类方法时调用:

         2015-06-14 22:45:38.448 a.out[751:25985] 人在吃东西

         2.重写父类父类的类方法后调用:

         2.2015-06-14 22:47:04.731 a.out[785:27011] 学生在吃东西

         */

        return 0;

    }

    总结:

    1.当多个类都有相同的成员变量或者方法的时候并且符合"xxx是xxx的关系"时,我们就可以使用继承

    2.子类不可有与父类相同的成员变量。如果存在的情况下会报编译错误。

    3.子类可以重写父类的方法,包括:类方法和对象方法。

    Objective-C组合:

    /**

       1.组合的使用

        组合主要解决的是“XXXX拥有XXX的关系”

        例如:人拥有狗。

    */

    #import <Foundation/Foundation.h>

    @interface Person : NSObject

    {

        int _age;

        int _weight;

        //每个人都有一只狗。

        Dog * dog;

    }

    - (void) run;

    + (void)eat;

    @end

    @implementation Person

    - (void) run

    {

        NSLog(@"人在跑");

    }

    + (void)eat

    {

        NSLog(@"人在吃东西");

    }

    @end

    @interface Dog : NSObject

    {

        char * _name;

        

    }

    @end

    @implementation Student

    @end

  • 相关阅读:
    OSPF的简易模拟配置第二篇
    OSPF的简易模拟配置第一篇
    RIP简易配置第二篇
    linux常用命令集(压缩和归档操作-共16个)
    简易路由重分布配置
    linux常用命令集(磁盘和文件系统操作-共15个)
    简易的浮动静态路由配置
    神州数码DHCP及DHCP中继配置
    神州数码HSRP(热备份路由协议)配置
    神州数码策略路由(PBR)配置
  • 原文地址:https://www.cnblogs.com/djrLog/p/4575930.html
Copyright © 2011-2022 走看看