OC基础5:继承

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、关于方法的覆写:

覆写的方法是一个同名的新方法,必须有相同的返回类型,并且参数的数目也不能改变。

时间: 2024-10-18 06:15:47

OC基础5:继承的相关文章

OC基础笔记——继承(广州黑马一期)

OC中的继承机制是单继承的,一个子类只能有一个父类 OC支持多层继承的,A 继承 NSObject,B继承A这就称为多层继承 在继承体系中方法调用的顺序 1.在自己类中找 2.如果没有,去父类中找 3.如果父类中没有,就去父类的父类中 4.如果父类的父类也没有,就还往上找,直到找到基类(NSObject) 5.如果NSObject都没有就报错了 //只有继承NSObject那么这个对象才有创建对象能力//NSObject是大部分类的基类(根类 root class),/* 当 A 类 继承 B类

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的

OC基础--继承

继承的基本概念: 现实生活中的继承: 人类是一个基类(也称做父类),通常情况下所有人类所共同具备的特性,如有手有脚能吃能喝 按照生活常规,我们继续给人类来细分的时候,我们可以分为学生类 工人类等,学生类和工人类同样具备手 脚 吃 喝等特性,而这些特性是所有人类所共有的,那么就可以让学生或工人类继承人类,这样当建立学生类和工人类的时候我们无需再定义人类中已经有的成员和方法,而只需要描述学生类和工人类所特有的特性即可. 学生类和工人类的特性是由在人类原有特性基础上增加而来的,那么学生类和工人类就是人

【《Objective-C基础教程 》笔记ch04】(五)OC中的继承inheritance机制

一.为什么需要继承 使用继承一方面继承了父类的特性,另一方便解决了重复代码维护问题. 二.继承之语法 1. @interface 子类名:父类名 2. OC只支持单继承,不支持继承多个父类. 3. 重构--移植和优化代码. 三. 继承的工作机制 1. 方法调度 子类拥有一个指向它父类的引用指针,消息传递时,OC的方法调度机制使用该信息来找到正确的实现方法,查找过程是现在子类中找,找不到再到父类中继续找. 2. 实例变量 1)继承实例源码 @interface Shape : NSObject {

iOS开发OC基础:OC基础概念总结,OC面向对象的思想

一.什么是OOP: OOP(Object Oriented Programming):面向对象编程 二.面向对象和面向过程的区别: 面向过程编程:分析解决问题的步骤,实现函数,依次使用面向对象编程:分解问题组成的对象,协调对象间的联系和通信,解决问题. 面向过程是以事件为中心,关心的是完成这个事件的详细步骤:面向对象是以事物为中心,关心的是事物应该具备的功能,而完成一个事件只是事物所有功能里面的一个小功能(以过程为中心,以对象为中心) 三.类和对象 对象定义了解决问题的步骤中的行为,不刻意完成一

iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误

在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握. expression:表达式assignable:赋值variable:变量redefinition:重复定义type:类型conflicting:冲突项invalid:无效的conversion:转换specifier:说明符indent:缩进operands:运算对象.操作数binary:二

OC基础 代理和协议

OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法. (2)协议的使用步骤:制定协议-->遵守协议-->实现协议-->调用协议. (3)协议声明的关键字: (a)@required,必须实现,不实现的话在.m文件内会报警告. (b)@optional,可选实现,不实现的话在.m文件内也不会报警告. (4)协议和继承的区别: (a)相同之处:都可以规范统一类中的方法. (b)不同之处:继承的子类不需要再实现一遍父类

OC基础 点语法的使用

OC基础 点语法的使用 1.创建一个Student类继承于NSObject,Student.h文件 #import <Foundation/Foundation.h> @interface Student : NSObject { NSString *_name; NSString *_nickName; } //@property定义属性 //1,它给该类声明了一个属性名+下划线的变量 //2,它给该类声明了一个getter方法和一个setter方法 //修饰符 //atomic和nonat

OC基础(22)

NSMutableString基本概念 NSMutableString常用方法 NSMutableString练习 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30p

oc基础知识(转)

1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouch Media Core Services Core OS -------------------- System Framework OC的类声明,定义域 OC关键字定义为  @class O-C特有的语句for(..in ..)迭代循环,其他的条件和循环语句和c一样 OC对面向对象的概述 (1)