OC之继承、初始化、便利构造器

2024-02-02 19:18

本文主要是介绍OC之继承、初始化、便利构造器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


继承

继承特点:上层(冒号后面)是父类,下层(冒号前面)是子类
继承是单向的不能相互继承
继承具有传递性,A继承于B,B继承于C,A具有B和C的特征和行为
子类能继承父类的所有特征和行为
面向对象提供了继承语法,能够大大简化代码,把公共的方法和实例变量写在父类里,子类只需要写自己独有的方法和实例变量即可
继承既能保证类的完整性又能简化代码
OC中只允许单继承
没有父类的类称为根类,OC中的根类是NSObject(祖宗)
继承的内容:所有实例变量和方法
如果子类不满意父类的方法,可以重写(overwrite)父类的方法
继承中方法的执行
A:B B:C C:D:NSOject
A继承自B,B继承自C,C继承自D  
给A对象发送消息eat:
1.查找本类中是否实现或者重写eat方法
2.如果本类没有实现,就去上一级的父类去查找是否实现eat
3.逐级查找eat方法,,直到找到为止,如果最后一个类也没有实现eat方法,程序会崩溃
super是编译器指令,并非对象
作用:给super发消息可以执行父类中实现的方法
子类可以重写父类的方法,即子类可以既有自己的实现,又有父类继承下来的实现,如果想使用,向super发送消息即可
创建对象分为两步:开辟内存空间、初始化
初始化方法的作用:为某些实例变量赋初值
初始化方法在整个对象生命周期内只调用一次
完整的初始化方法:
- (void ) init{
//给super发送init消息:即执行父类中的init方法
self = [super init];
if(self){
//子类自己的初始化设置
}
//初始化完成,返回对象本身
return self;
}
学习继承之前,初始化方法并没有self = [super init];字样。我们为实例变量逐一赋值
学习了继承之后,父类中声明了公共的实例变量。作为父类,也有自己的初始化方法,为这些事例变量进行赋值。
子类中定义了除了父类中的实例变量之外的实例变量
在自身初始化过程中,优先向super发送init方法。初始化公共变量。初始化成功后,再初始化自身特有变量,从而完成所有
实例变量的初始化
初始化过程:
1.自己的初始化方法中,优先调用父类的初始化方法。
2。父类的初始化方法中再调用父类的初始化方法,依次往上调用
3。处于最上层的初始化完成后回到第二层初始化方法中,完成第二层的初始化
4。第二层的初始化完成后再返回第三层的初始化方法中,依次执行初始化方法直到本类完成初始化方法
初始化方法的特征:
初始化方法是“-”方法
返回值是id或者instancetype类型
以init开头
可以带0到多个参数(也就是咱们的自定义初始化方法)
内部实现:先执行super的初始化方法,再初始化自身变量,最后return self
便利构造器
声明和实现便利构造器
+(id)personWithName:(NSString *)name
{
Person * p = [[Person alloc]initWithName:name];
return  p;
}
便利构造器在初始化方法的基础上前进一小步,封装了对象的创建过程(也就是把alloc init 方法封装到对象内部)
便利构造器是+方法,只能类去调用,可以添加参数
内部实现:封装了alloc init方法,使用起来更简洁

这篇关于OC之继承、初始化、便利构造器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671693

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

JavaSE——封装、继承和多态

1. 封装 1.1 概念      面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节 。     比如:对于电脑这样一个复杂的设备,提供给用户的就只是:开关机、通过键盘输入,显示器, USB 插孔等,让用户来和计算机进行交互,完成日常事务。但实际上:电脑真正工作的却是CPU 、显卡、内存等一些硬件元件。

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

@postconstruct初始化的操作

从Java EE 5规范开始,Servlet中增加了两个影响Servlet生命周期的注解(Annotion);@PostConstruct和@PreDestroy。这两个注解被用来修饰一个非静态的void()方法 。写法有如下两种方式: @PostConstruct Public void someMethod() {}

spring和tomcat初始化的类和注解

1.InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。 spring为bean提供了两种初始化bean的方式,实现InitializingBean接口,实现afterPropertiesSet方法,或者在配置文件中同过init-method指定,两种方式可以同时使用 实

LabVIEW环境中等待FPGA模块初始化完成

这个程序使用的是LabVIEW环境中的FPGA模块和I/O模块初始化功能,主要实现等待FAM(Field-Programmable Gate Array Module,FPGA模块)的初始化完成,并处理初始化过程中的错误。让我们逐步分析各部分的功能: 1. Wait for FAM Initialization框架 此程序框架用于等待I/O模块成功初始化。如果在5秒钟内模块没有完成配