文档章节

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

尘埃眠于光年yr
 尘埃眠于光年yr
发布于 2015/10/10 17:14
字数 614
阅读 11
收藏 0
点赞 0
评论 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 ⋅ 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 ⋅ 0

【IOS开发笔记02】学生管理系统

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

范大脚脚 ⋅ 2017/11/17 ⋅ 0

iOS 框架--MJExtension-Swift

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

nsdictionary ⋅ 2015/07/13 ⋅ 2

OC运行时编程指南

OC运行时编程指南 介绍 OC这个语言尽可能的将一些决定从编译和链接时推迟到运行时。它会尽可能的的处理事情。这意味这个语言不仅需要一个编译器,还需要一个运行时系统去执行编译过的代码。这...

charsunny ⋅ 2014/02/18 ⋅ 2

swift语法学习

变量和常量 变量,可以修改的 常量,一经定义不能修改 在swift开发中,通常先定义常量,只有必须修改的时候,再改成 注意点: swift是一个对变量类型要求及其严格的语言 任何数据类型之间,都...

冷漠叻荭颜 ⋅ 2015/05/10 ⋅ 1

Swift2.0与OC混编实验--动态库(一)

完整的Demo下载 做了以下几个实验 验证Swift和OC的项目可以使用任意语言开发的动态库 1、创建了一个Swift语言的动态库 2、创建了一个OC语言的动态库 3、创建了一个SwiftApp项目,在项目中同时...

泊竹 ⋅ 2016/01/17 ⋅ 0

02 - Object-C 面向对象

面向对象基本术语 面向对象 Object Oriented,简称OO 面向对象编程 Object Oriented Programming,简称OOP 2. 类和对象 2.1、类的声明 类名属性的命名规则:有意义、驼峰标识、首字母大写(类...

口十耳 ⋅ 2015/12/22 ⋅ 0

js与native交互

js与native交互 UIWebView Native调用JS,使用来解释执行js脚本。 PS:苹果推荐iOS8之后的app使用来代替 UIWebView,同时也使用方法来替代 stringByEvaluatingJavaScriptFromString,因为会一...

coolwxb ⋅ 2016/12/02 ⋅ 0

Swift--字符串

一 定义字符串 oc语言: NSString stringValue = "ab"; swift语言:var stringValue1 = "ab" 注: oc语言的字符只包含ascii码,每个字符只占1个字节,字符串是以0结尾 swift语言包含unicode...

上官尘 ⋅ 2016/02/22 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部