文档章节

OC学习笔记十一 继承

卧龙小
 卧龙小
发布于 2014/10/12 22:28
字数 978
阅读 55
收藏 2
点赞 0
评论 0

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力.一个类继承另外一个类,就具有该类的属性和方法。例如A类继承B类,A类就具有B类的属性和方法,A类称作为B类的子类,B类称作为A类的父类和超类。


如何判断继承是否合理:

通过 is a 谁是谁。例如 IPHONE 是手机。则说明他们有继承关系(类对象中有 isa(指针),就是通过继承来的)。

继承实现方式:在声明的时候,用:在后面写上父类的名字

@interface ClassName:FatherClassName

例如:
@interface Cat : NSObject


继承的好处和缺点:

1).提高了代码的复用性

2).继承的出现让类和类之间产生类关系,提供了多态的前提。

3).耦合性太强,依赖关系太强。


注意点:

1).在子类中,不能重复定义父类的成员变量。

2).调用某个方法时,优先在子类中查找,如果找不到,再到父类中查找。

3).OC中只有单继承(只有一个父类),没有继承,但支持多重继承 

单继承的原因:如果有多个父类,父类都具有相同名字,子类则无法区分是那个父类的方法


例子:通过animal cat dog 类举例。

首先判断继承关系。

cat is a animal ?  猫是动物,所有具有继承关系

dog is a animal? 狗是动物,所有具有继承关系

动物都具有 年龄 名字 属性 和 吃的行为。


一 父类 Animal

===1.animal 声明类===

@interface Animal : NSObject
{
    @private
    int _age;
    NSString *_name;
}

/*对属性封装*/
-(void)setAge:(int) age;
-(int)age;

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

-(void)eat;
@end


===2.animal 实现类===
@implementation Animal

-(void)setAge:(int) age
{
    //当age<0时,则是不合理数据,则该赋值为0。
    _age=age<0?0:age;
}


-(int)age
{
    return _age;
}


-(void)setName:(NSString *)name
{
    _name=name;
}


-(NSString *)name
{
    return _name;
}


-(void)eat
{
    NSLog(@"animal eat ..");
}

@end


二子类 dog类

===1.声明类===
#import "Animal.h" 
//导入Animal.h ,让Dog继承Animal类,具有父类的属性和方法
@interface Dog : Animal
@end

===2.实现类===
@implementation Dog

@end


三子类 cat 类

===1.声明类===
#import "Animal.h" 
//导入Animal.h ,让Dog继承Animal类,具有父类的属性和方法
@interface Cat : Animal
@end

===2.实现类===
@implementation Cat
//重写 Animal 中的 eat 方法

/*
 方法重写:当子类用了父类的同样的方法(包括类方法 对象方法),称之为重写,
 调用遵守就近原则(先找子类,再找父类)
 
 继承调用原理:
 在子类 类对象中,保存super指针,指向父类,在调用方法时,先在子类中去找相应的方法,
 如果找到则执行,如果没有,则通过父类super指针调用父类的相应方法
 
 调用过程:
 1).调用方法(栈)在对象(堆)中通过lsa指针 去搜索 类对象(堆)中是否有调用的方法
 2).如果有则直接执行
 3).如果没有,则通过类对象中的super指针到父类中的搜索。
 */
-(void)eat
{
    NSLog(@"Cat eat ..");
}
@end


四 主函数

#import "Cat.h"
#import "Dog.h"
int main(int argc, const char * argv[])
{
    
    @autoreleasepool {
        NSLog(@"======Cat 信息======");
        //初始化实例 cat1
        Cat *cat = [Cat new];
        //animal中已经实现了setAge方法,当cat 继承animal类时,会自己继承该方法。
        [cat setAge:10];
        NSLog(@"age=%d",[cat age]);
        //调用 cat 中重写的 eat 方法
        [cat eat];
  
        

        NSLog(@"======Dog 信息======");
        Dog *dog = [Dog new];
        [dog eat];//如果没有重写,则会掉用父类的eat方法
        
    }
    return 0;
}


五输出

2014-10-12 22:27:22.711 继承和多态[657:303] ======Cat 信息======
2014-10-12 22:27:22.712 继承和多态[657:303] cat1 age=10
2014-10-12 22:27:22.712 继承和多态[657:303] Cat eat ..
2014-10-12 22:27:22.713 继承和多态[657:303] ======Dog 信息======
2014-10-12 22:27:22.713 继承和多态[657:303] animal eat ..


© 著作权归作者所有

共有 人打赏支持
卧龙小
粉丝 42
博文 146
码字总数 70107
作品 0
西城
程序员

hjimce算法类博文目录 个人博客:http://blog.csdn.net/hjimce 个人qq:1393852684 知乎:https://www.zhihu.com/people/huang-jin-chi-28/activities 一、深度学习 深度学习(七十)darknet...

hjimce ⋅ 2016/01/24 ⋅ 0

“我爱智能”原创性博客索引

不知不觉,博客也写出了一点小体系,新的阶段已经开始,未来希望再接再厉继续补充这一体系,在成长中写博客,在博客中成长,在此先做一个小的梳理,谢谢大家的支持。 一)关于深度学习系列 ...

on2way ⋅ 2015/08/29 ⋅ 0

《Pro ASP.NET MVC 3 Framework》学习笔记目录

《Pro ASP.NET MVC 3 Framework》简介: 作者: Adam Freeman 和 Steven Sanderson 出版社: Apress; New 平装: 820页 语种: 英语 ISBN: 1430234040 声明:笔记里面按我自己的理解翻译了大部分...

mszhangxuefei ⋅ 2012/02/07 ⋅ 0

九月份的感悟

这个九月对于我来说是成长的季节,从实习工作到辞职,从参加校招到此时此刻心情爆炸.. 这个月学习了很多,基本每天都很充实,忙的不可开交,但想想拿到人生第一桶金,还是挺开心的。 辞职是因...

Timor_张先生 ⋅ 2017/09/28 ⋅ 0

KVM虚拟化学习笔记系列文章列表

kvm虚拟化学习笔记(一)之kvm虚拟化环境安装 http://koumm.blog.51cto.com/703525/1288795 kvm虚拟化学习笔记(二)之linux kvm虚拟机安装 http://koumm.blog.51cto.com/703525/1289627 kvm虚拟...

蓝狐乐队 ⋅ 2015/03/19 ⋅ 0

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

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

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

iOS开发博客前言

学了iOS三年多(工作方面就还不够,呵呵),所以其中看了很多文章,也从大牛那里学了不少东西,摘抄下来很多笔记,现在太乱太杂,需要整理一下。所以,接下来要写的东西,是我从学习到工作的...

kelolo ⋅ 2016/06/20 ⋅ 0

分享java教程~

学习Java一 配置环境变量 学习Java二 开发第一个Java程序 学习Java三 Java的注释 学习Java四 Java标识符 学习Java五 数据类型 学习Java六 Java的浮点精度 学习Java七 Java数组 学习Java八 Ja...

JackChu ⋅ 2010/09/23 ⋅ 1

DOM笔记(十二):又谈原型对象

因为之前谢过一篇关于原型对象的笔记:浅谈JavaScript中的原型模式。现在我又重新看到这个话题,对原型有了进一步的理解,所以,又要谈谈原型对象。 一、理解原型对象 创建的每一个函数都有一...

dwqs ⋅ 2014/12/27 ⋅ 0

Bootstrap响应式前端框架笔记十一——分页与标签

Bootstrap响应式前端框架笔记十一——分页与标签 在开发搜索结果页、列表页时通常会使用到分页器控件,Bootstrap中提供了方便的类来进行分页器的创建,示例如下: 效果如下: 为li元素添加d...

珲少 ⋅ 2016/12/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

面试-JVM 内存结构

JVM 内存结构

秋日芒草 ⋅ 1分钟前 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 24分钟前 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 56分钟前 ⋅ 0

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 今天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 今天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 今天 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 今天 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部