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

Objective-c继承与组合的更多相关文章

  1. 关于Java中的继承和组合的一个错误使用的例子

    [TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...

  2. Java继承与组合

    Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...

  3. [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类

    目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...

  4. java 中继承,组合,重载,重写的实现原理 (转)

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  5. <Java中的继承和组合之间的联系和区别>

    //Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...

  6. Java中的继承与组合(转载)

    本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...

  7. [Objective-c 基础 - 2.3] 继承、组合

    A.继承的实现: is a 1.不允许子类.父类存在相同的成员变量 2.方法调用优先原则:子类调用方法的时候,优先从本类寻找,若无则向上在父类中寻找 3.重写:子类重新实现父类的方法,覆盖父类之前的方 ...

  8. Java中的继承与组合

    本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...

  9. Go如何使用实现继承的组合

    Go它提供了一个非常值得称道的并发支持,但Go它不支持完全面向对象的.这并不意味着Go不支持面向对象,,和Go的OO系统做的很轻巧,学习降至最低成本.向对象让Go失去了一些OO的方便特性,可是更高的效 ...

  10. [译]Java中的继承 VS 组合

    (文章翻译自Inheritance vs. Composition in Java) 这篇文章阐述了Java中继承和组合的概念.它首先给出了一个继承的例子然后指出怎么通过组合来提高继承的设计.最后总结 ...

随机推荐

  1. TStringList 善用 value['names'] 即使value 是带=号的值都没有关系呵呵 ,我靠 强,以后就用这个了,key=value首选

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4YAAAHiCAIAAAA760U/AAAgAElEQVR4nOy9Z5QUV57oWe/j7tk9u2 ...

  2. MinGW 使用和创建 DLL 应注意的问题

    MinGW 是 GCC 的 Windows 版本,稳定版已经到了 4.5.2,功能和性能上很好,感觉不比 Microsoft 自家的 VC 差啊.但是 MinGW 下使用和创建 DLL 倒是要特别注意 ...

  3. js-判断移动端用户是横屏放的还是竖屏放的

    在一些移动端页面中,页面的样式我们就支持竖屏播放,这时我们就需要判断是横屏还是竖屏了,不同的方向显示冉的样式. //判断手机横屏竖屏 var html = ""; window.a ...

  4. GitHub 上受欢迎的 Android UI Library 整理(一)

    抽屉菜单 https://github.com/mikepenz/MaterialDrawer ★7337 - 安卓抽屉效果实现方案https://github.com/Yalantis/Side-M ...

  5. Careercup | Chapter 2

    链表的题里面,快慢指针.双指针用得很多. 2.1 Write code to remove duplicates from an unsorted linked list.FOLLOW UPHow w ...

  6. Codeforces 245G Suggested Friends 暴力乱搞

    G. Suggested Friends time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  7. VS&quot;后生成事件&quot; 菜单的使用

    网上有很多的文章都在介绍怎样创建一个自己定义的dll文件,以及怎样使用一个dll文件,在此不在赘述.本文主要介绍怎样使用VS2008的"生成后事件"的命令行,将一个dll文件直接复 ...

  8. Net调用非托管代码(P/Invoke与C++InterOP) [转]

    将 System::String 转换为 wchar_t* 或 char* PtrToStringChars将String转换为本机wchar_t *或char *.由于 CLR 字符串为内部 Uni ...

  9. 安装 - LNMP一键安装包

    https://lnmp.org/ 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要5GB以上硬盘剩余空间 需要128MB以上内存( ...

  10. PS 抠图如何使用通道法处理头发

      通道抠图法抠出美女飘逸头发-PS抠图实例教程 抠图更换背景后效果图 通道抠图法抠出美女飘逸头发-PS抠图实例教程 教程步骤: 1  打开原图,进入通道面板. 通道抠图法抠出美女飘逸头发-PS抠图实 ...