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
Objective-c继承与组合的更多相关文章
- 关于Java中的继承和组合的一个错误使用的例子
[TOC] 关于Java中的继承和组合的一个错误使用的例子 相信绝大多数人都比较熟悉Java中的「继承」和「组合」这两个东西,本篇文章就主要就这两个话题谈论一下.如果我某些地方写的不对,或者比较幼稚, ...
- Java继承与组合
Java继承与组合 继承 java 中使用extends关键字表示继承关系,当创建一个类时,如果没有明确指出要继承的类,则是隐式地从根类Object进行继承. 子类继承父类的成员变量 子类能够继承父类 ...
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...
- java 中继承,组合,重载,重写的实现原理 (转)
我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...
- <Java中的继承和组合之间的联系和区别>
//Java中的继承和组合之间的联系和区别 //本例是继承 class Animal { private void beat() { System.out.println("心胀跳动...& ...
- Java中的继承与组合(转载)
本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...
- [Objective-c 基础 - 2.3] 继承、组合
A.继承的实现: is a 1.不允许子类.父类存在相同的成员变量 2.方法调用优先原则:子类调用方法的时候,优先从本类寻找,若无则向上在父类中寻找 3.重写:子类重新实现父类的方法,覆盖父类之前的方 ...
- Java中的继承与组合
本文主要说明Java中继承与组合的概念,以及它们之间的联系与区别.首先文章会给出一小段代码示例,用于展示到底什么是继承.然后演示如何通过“组合”来改进这种继承的设计机制.最后总结这两者的应用场景,即到 ...
- Go如何使用实现继承的组合
Go它提供了一个非常值得称道的并发支持,但Go它不支持完全面向对象的.这并不意味着Go不支持面向对象,,和Go的OO系统做的很轻巧,学习降至最低成本.向对象让Go失去了一些OO的方便特性,可是更高的效 ...
- [译]Java中的继承 VS 组合
(文章翻译自Inheritance vs. Composition in Java) 这篇文章阐述了Java中继承和组合的概念.它首先给出了一个继承的例子然后指出怎么通过组合来提高继承的设计.最后总结 ...
随机推荐
- LeetCode OJ--Single Number
https://oj.leetcode.com/problems/single-number/ 给一个数列,其中只有一个数不是两两相同的,在O(n)时间内求出来,并且不使用额外空间. 使用异或操作,如 ...
- Delphi 之Copyrect的使用
http://cqujsjcyj.iteye.com/blog/380970 Copyrect的使用(图片复制.放大.以及做图片放大镜等)一.从一个选取一个区域中的图象到另一个图象组件中的固定区域pr ...
- 使用vue-cli搭建element-ui项目
最近在使用element-ui搭建项目时发现若只纯用webpack来运行element-ui,要配置各种文件,对于新手来说实在太不友好了, 就想到用vue-cli来搭建整个vue项目 1.安装node ...
- U盘格式化时分配单元的大小的设置
格式化时主要有如下格式,且对应的操作系统的不一样: FAT32:Windows和Mac都支持,不过单个文件不能超过4G,但可以采用分包压缩的方式搞定. NTFS:Windows专用格式,Mac常规无法 ...
- 【CSS】获取元素的z-index值以及各种值的意义
js可以获取其元素的z-index值: $("document").ready(function(){ var a = $('.row').css('z-index'); aler ...
- [剑指Offer]2.变态跳台阶
题目 一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级--它也能够跳上n级. 求该青蛙跳上一个n级的台阶总共同拥有多少种跳法. 思路 用Fib(n)表示青蛙跳上n阶台阶的跳法数,设定Fib(0) = 1 ...
- asp.net Excel导入&导出
1.Excel数据导入到数据库中: //该方法实现从Excel中导出数据到DataSet中,其中filepath为Excel文件的绝对路径,sheetname为表示那个Excel表: p ...
- maven运行update命令时报org/apache/maven/shared/filtering/MavenFilteringException错误
在eclipse中对准项目运行maven->update project命令时报错:org/apache/maven/shared/filtering/MavenFiltering ...
- vue2 + typescript2 自定义过滤器
1.定义一个过滤器 // color-directive.ts import { DirectiveOptions } from 'vue' const directive: DirectiveOpt ...
- SpringMVC:文件上传
MultipartFile attach HttpServletRequest re commons-io-2.0.jar (一定要用2.0以上的版本,否则没有copyInputStreamToFil ...