文档章节

2015-10-10 OC语言中的继承

尘埃眠于光年yr
 尘埃眠于光年yr
发布于 2015/10/10 17:14
字数 614
阅读 11
收藏 0

关于面向对象中的继承问题其实不难理解

当我们的代码中的不同类出现大量相同的属性和方法的时候,我们就可以用继承来减少重复代码的使用,这样可以大大提高代码的效率,也可以方便后期代码的维护。

首先,继承需要有子类和父类,通常OC中的父类是NSObject,但是在某些时候,当我们的类需要继承某些属性和功能的时候,我们就可以自己设置该父类。下面用一个具体的实例说明。

例如,现在有狗和猫两个类,他们同时具有姓名和体重两个属性,以及具有跑这个方法,此时如果单独实现必然要在两个不同的类里面分别写出各自的属性和方法,但是这样就造成了代码的重复,因此我们可以考虑狗和猫可以同时继承同一个类的

属性和方法,例如将该类命名为动物。

animal的接口文件:

#import <Foundation/Foundation.h>


@interface Animal : NSObject

{

    int _weight;

    NSString *_name;

}

-(void) setWeight : (int) weight;

-(int) weight;

-(void) setName : (NSString *) name;

-(void) run;

@end




animal的接口文件的实现

#import "Animal.h"


@implementation Animal

-(void) setWeight : (int) weight

{

    _weight = weight;

}

-(int) weight

{

    return _weight;

}

-(void) setName : (NSString *) name

{

    _name = name;

}

-(void) run

{

   NSLog(@"%@跑起来了",_name);

}

@end


而此时狗和猫两个类就可以直接继承animal的属性和方法

dog.h文件:

#import <Foundation/Foundation.h>

//在头文件中导入animal类

#import "Animal.h"


//将继承对象改为 animal

@interface Dog : Animal


@end



cat.h文件

#import <Foundation/Foundation.h>

#import "Animal.h"

@interface Cat: Animal

@end


此时二者接口实现中不用再写


main.m文件

#import <Foundation/Foundation.h>

#import "Animal.h"

#include "Cat.h"

#include "Dog.h"


int main()

{

    Cat *cat =[Cat new];

    [cat setWeight:2];

    [cat setName:@"阿飞"];

    [cat run];

    

    

    Dog *dog =[Dog new];

    [dog   setWeight:8];

    [dog setName:@"阿旺"];

    [dog run]

    

return 0;

}


另外,子类的方法可以重写,此时不再继承父类方法。但是同一属性只能是自己的或继承父类的,而不能同时存在。

super关键字

1. 作用:既可以重写,又能调用超类的实现方式。
2. 语法:[super setNumber:number]
3. 注意:super关键字在对象方法中就调用对象方法,类方法中就调用类方法

4. 使用场合:子类重写父类的方法又想保留父类的行为。 



© 著作权归作者所有

共有 人打赏支持
尘埃眠于光年yr
粉丝 0
博文 15
码字总数 13635
作品 0
西安
私信 提问
OC基础学习日志

课后练习题 定义Car,Bus,Truck为例题 main.m #import <Foundation/Foundation.h> import "Car.h" import "Bus.h" import "Truck.h" int main(int argc, const char * argv[]) { @autorelea......

Anyi_安一
2015/10/12
26
0
如何实现iOS热更新

如何实现iOS热更新 字数803 阅读7169 评论19 喜欢42 最近被苹果审核整怕了,每次提交版本都得等待一周到两周的审核时间,我是受不了这种速度了,于是决定研究有没有其他的方法跳过提交版本这...

法斗斗
2016/08/15
9
0
【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品、native、前端、服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端...

范大脚脚
2017/11/17
0
0
iOS 框架--MJExtension-Swift

1.这个框架是做什么的? .这个框架可以理解为MJExtension的Swift版本,主要是实现类反射,并在实现反射功能的基础上实现字典-模型一键互转! MJExtension(OC): https://github.com/CoderMJL...

nsdictionary
2015/07/13
2.2K
2
Swift编程权威指南第2版 读后收获

  自从参加工作一直在用OC做iOS开发。在2015年的时候苹果刚推出swift1.0不久,当时毕竟是新推出的语言,大家也都很有激情的学习。不过在学完后发现很难在实际项目中使用,再加上当时公司项...

滴水微澜
08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
49分钟前
1
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
52分钟前
4
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
3
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部