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

  • 相关阅读:
    Python random模块下的常用函数小结
    MySQL 数据库连接
    LeetCode 376. 摆动序列 做题小结
    LeetCode 1005. K 次取反后最大化的数组和 做题小结
    LeetCode 455. 分发饼干 做题小结
    完美解决Python与anaconda之间的冲突问题
    LeetCode 122. 买卖股票的最佳时机 II 做题小结
    LeetCode 714. 买卖股票的最佳时机含手续费 做题小结
    如何去除有道云笔记广告(windows)
    baby web
  • 原文地址:https://www.cnblogs.com/djrLog/p/4575930.html
Copyright © 2011-2022 走看看