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

  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/djrLog/p/4575930.html
Copyright © 2011-2022 走看看