OC基础5:继承
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的《Objective-C程序设计第6版》过程中的笔记。
1、根类即是最顶层的类,父类也可称为超类;
2、关于实例变量的继承:
只有声明在@interface部分的实例变量才能被子类继承:包括在类名后马上使用花括号声明的变量和使用@property声明的变量,都可以继承。如果完全声明在@implementation部分的变量,则属于私有变量,需要提供方法才能访问。
3、每个实例都有自己的一套实例变量,即使这套实例变量是继承来的。比如bClass是从aClass继承来的,他们都有一个变量(int) n,那么当改变了aClass.a的值的时候,bClass.a的值不会随着改变。他们是两个不同的实例。
反观另一种特别的情况(代码8-5):Rectangle类是矩形类,XYPoint类是点类,Rectangle类里面包含了一个变量origin是(XYPoint *)类型的,用来存放这个矩形的位置点。新建了一个Rectangle类的实例myRect,新建了一个XYPoint类的实例myPoint,然后通过语句
myRect.origin= myPoint;
将myPoint的值赋给myRect作为它的位置点。这时候出现了一种情况,当myPoint的值改变了以后,myRect所包含的origin变量的值也跟着改变了。原因是使用上面的语句的时候,赋给origin变量的值并不是myPoint的内容,而是一个指针,指向了myPoint的存储位置,所以当myPoint的内容改变了以后,origin变量的值也跟着改变了,myRect并没有自己新建一套变量去存储myPoint的内容,存放的仅仅是一个指针。
对于这两种情况要区别去理解:aClass和bClass是两个不同的实例,各有各的变量;myRect并没有用一个变量去存储myPoint的内容,仅仅只用了一个(XYPoint *)类型的变量来存放了myPoint的指针。
4、对于3中的myRect和myPoint,只要在myRect里面重新声明了myPoint用以存放位置的几个变量,然后把myPoint里面对应的变量值一一赋给自己的变量,那么myPoint的值再怎么改变也不会再影响到myRect包含的位置点变量了。其实即是在myRect的内部声明一个myPoint,即有了一个私有的myPoint。
5、关于@class指令,比如在接口文件CClass.h中有如下代码段:
#import <Foundation/Foundation.h>
@class AClass
@interfaceCClass: NSObject
…
在这段代码中出现了指令@class,它的意思是接下来的代码中会使用到AClass这个类,这里告诉编译器接下来如果遇到“AClass”就把它当做一个类来对待即可。
但是如果下方代码要访问到Aclass包含的变量,那就会报错,这种情况应该把Aclass.h这个接口文件import进来。
6、关于4,其实不用再去声明XYPoint类的变量,只需要将Rectangle类中设置origin的方法改写如下即可:
-(void)setOrigin: (XYPoint *) pt {
if (! origin) { //如果origin是空的,则为false,那么(! origin)为true,执行以下代码;
origin = [[XYPoint alloc] init];
}
origin.x = pt.x; //x和y都是XYPoint的变量,这里origin是一个(XYPoint *)型的变量,
origin.y = pt.y; //它也会包含有一套xy,所以不需再去声明一套;
}
直接在方法中设置一套xy,就不会受myPoint影响。
这种情况下,虽然origin.x被赋予的仍然是pt.x的指针,但是也完全不需要担心会受到myPoint的影响的了,因为虽然现在origin.x和pt.x指向的是同一块内存,但是如果改变了pt.x的值的话,其实系统是新分配了一块内存写了一个新的值,然后让pt.x指向这块新的内存,origin.x指向的内存不会受到任何影响。
以下图为例:
(1)、origin = myPoint是这种情况:
(2)、origin.x = pt.x是这种情况:
7、在默认的情况下,合成(synthesize)的设值方法只是简单地复制对象的指针,而不是对象的本身,其实即是assign。
8、关于方法的覆写:
覆写的方法是一个同名的新方法,必须有相同的返回类型,并且参数的数目也不能改变。
OC基础5:继承的更多相关文章
- OC基础--继承
继承的基本概念: 现实生活中的继承: 人类是一个基类(也称做父类),通常情况下所有人类所共同具备的特性,如有手有脚能吃能喝 按照生活常规,我们继续给人类来细分的时候,我们可以分为学生类 工人类等,学生 ...
- 四.OC基础--1.文档安装和方法重载,2.self和super&static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&私有方法,6.description方法
四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- O-c中类的继承与派生的概念
什么是继承 众所周知,面向对象的编程语言具有: 抽象性, 封装性, 继承性, 以及多态性 的特征. 那么什么是继承呢? 传统意义上是指从父辈那里获得父辈留下的东西 在开发中, 继承就是"复用 ...
- OC基础 代理和协议
OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议 ...
- OC基础 类的三大特性
OC基础 类的三大特性 OC的类和JAVA一样,都有三大特性:继承,封装,多态,那么我们就来看一下OC中类的三大特性. 1.继承 继承的特点: (1)子类从父类继承了属性和方法. (2)子类独有的属 ...
- OC基础 点语法的使用
OC基础 点语法的使用 1.创建一个Student类继承于NSObject,Student.h文件 #import <Foundation/Foundation.h> @interface ...
- OC基础17:归档
"OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.归档即是用某种格式把一个或多个对象保存 ...
随机推荐
- (转载)HDU4565
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4565 这个博客讲的比较好:http://blog.csdn.net/ljd4305/article/d ...
- tr转换或删除字符
字符处理命令:tr —— 转换或删除字符 逐个字符处理而不是处理单词的tr [OPTION]... SET1 [SET2] -d: 删除出现在字符集中的所有字符 tr ab AB
- iOS开发-CGAffineTransformMakeRotation改变了中心解决的方法
坑爹的. 为了这个问题折腾了2个小时. 恼.. 今天在写一个时钟demo的时候, 时针的旋转用到了CGAffineTransformMakeRotation, 按理说. 图像的旋转是以图像本身的中心 ...
- Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6967204 在Android系统中,不同的应用 ...
- zabbix windows angent安装:
zabbix windows angent安装:1.下载zabbix agent for windows客户端,直接解压到C盘下.C:\zabbix 的目录015/04/21 11:16 <DI ...
- 查看mysql apache php nginx的编译参数
查看mysql编译参数: cat /usr/local/mysql/bin/mysqlbug|grep configure 查看apache编译参数: cat /usr/local/apache2/b ...
- PHP学习笔记1.2——预定义变量参考
预定义变量和用户自定义变量在使用上没有区别,大多数预定义变量的执行结果都是服务器的相关信息(如:版本号.路径.错误参数等),所以我们很少将其用于网站前台开发,如果被别有用心得人知道了后,会严重威胁服务 ...
- Jquery 工具类函数
1.$.browser 获取当前浏览器的名称和版本信息 $.browser.chrome 获取chrome浏览器 $.browser.mozilla 获取火狐浏览器 $.browser.msie ...
- SQL server 2008数据库的备份与还原、分离(转)
SQL server 2008数据库的备份与还原.分离(转) 一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Ser ...
- JQ 操作样式,背景切换
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...