文档章节

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

尘埃眠于光年yr
 尘埃眠于光年yr
发布于 2015/10/10 17:14
字数 614
阅读 12
收藏 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
西安
私信 提问
如何实现iOS热更新

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

法斗斗
2016/08/15
77
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开发笔记02】学生管理系统

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

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

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

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

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

滴水微澜
2018/08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:TCP/IP协议

一、介绍 TCP协议属于OSI七层模型中的传输层协议,提供处于网络连接中的两台计算机之间的数据 传输。   在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议...

浮躁的码农
32分钟前
3
0
一言不合就删库跑路?万名贡献者和阿里巴巴开源的二三事

9 月 27 日云栖大会,阿里巴巴宣布贾扬清担任开源技术委员会负责人。 有人问:开源是为了什么? 从个人视角看,可以证明自己的专业能力,获得行业认可; 从企业视角看,可以建立技术影响力,...

大涛学弟
42分钟前
4
0
JAVA编程注意事项(性能篇)

1. 尽量在合适的场合使用单例 使用单例可以缩短加载的时间,提高加载的效率,单例主要适用于以下三个方面: 第一,控制资源的使用,通过线程同步来控制资源的并发访问; 第二,控制实例的产生...

你好夜故事
44分钟前
5
0
List 前端 AngularJS JS 对IP排序

数据格式 $scope.dataList=[ {"ip":"192.168.10.10", "port":"8080",...}, { "ip":"192.168.10.12", "port":"8080",... } ,.....] 调用 $scope.ipSortForward($scope.dataList,"ip") 核心代码......

最菜最菜之小菜鸟
44分钟前
4
0
浅析Cassandra LeveledCompactionStrategy

前言 Cassandra是基于LSM架构的分布式数据库。LSM中有一个很重要的过程,就是压缩(Compaction)。默认的压缩策略是SizeTieredCompactionStrategy,今天主要说一下另一种压缩策略LeveledComp...

阿里云官方博客
48分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部