继承、初始化方法

一、继承

继承的上层:父类  继承的下层:子类

继承是单向的,不能相互继承

继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为

子类能继承父类全部的特征和行为(私有变量也继承过来了,只是不能访问)

面向对象提供了继承语法。能大大简化代码,把公共的方法和实例对象写在父类里。子类只需要写自己独有的实例变量和方法即可

继承既能保证类的完整,又能简化代码

继承特点

oc中只允许单继承

没有父类的类称为根类,oc中得根类是NSObject(祖宗)

继承的内容:所有的实例变量和方法

如果子类不满意父类方法的实现,可以重写父类的方法

继承树

继承中方法的执行

super 关键字

super是编译器指令,并⾮对象。

作用:给super发消息,可以执⾏⽗类中实现的⽅方法。

⼦类可以重写⽗类的⽅法,即:⼦类既有自己的实现,⼜有父 类继承下来的实现,如果想使⽤用父类的实现,向super发送消息

//重写sayHi方法
- (void)sayHi
{[super sayHi];//调用父类sayHi方法NSLog(@"ok");
}

- (void)study//学习
{[super sayHi];//调用父类sayHi方法[self sayHi];//调用自身sayHi方法NSLog(@"%@ 我正在努力学习",_name);
}

二、初始化方法

创建对象分两步:开辟空间、初始化。

初始化⽅方法的主要作⽤用是:为某些实例变量赋初值。

初始化⽅方法在对象的整个⽣生命周期⾥里只使⽤用⼀一次。

- (instancetype)initwithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;
//instancetype取代id
- (id)initwithName:(NSString *)name sex:(NSString *)sex number:(NSInteger)number;

//初始化的时候,优先调用父类的初始化方法,初始化父类中的变量,然后在初始化自己的变量。

//每个类都清楚自己独有的变量,因此。初始化方法里仅仅初始化自己独有的变量,通过调用父类的初始化方法,初始化继承过来的变量

///经过一番调用之后,继承树上的所有变量都可以得到初始化

//最不科学的初始化方法:在子类里面,为每一个变量赋值,因为,你需要自己查阅都继承了哪些变量。

⼦类定义了除⽗类中公共实例变量之外的实例变量。在自身的初始 化方法中,优先向super发送init消息,初始化公共变量,初始化成 功之后,再初始化⾃身特有变量,从⽽完成全部实例变量的初始化。

初始化过程

1. 执⾏行⽗父类中实现的初始化⽅方法。(向上递归到NSObject类中的初始化⽅方法)

2. 从根类NSObject开始执⾏行初始化⽅方法。

3. 判断⽗父类中的初始化是否成功,即self是否存在。

4. 完成对象的初始化设置,返回对象。

5. 初始化⼦子类实例变量。

初始化方法特征

初始化⽅方法是 “-”⽅方法

id或者instancetype类型的返回值

以init开头

可以带0到多个参数 内部实现:先执⾏行super的初始化⽅方法,再初始化⾃自⾝身变量,return self。

三、便利构造器

便利构造器在初始化方法的基础上前进了⼀小步。

封装了对象创建过程。

便利构造器是“+”⽅法,返回本类型的实例,⽅法名以类名开头。

可以有0到多个参数。 内部实现:封装了alloc和初始化⽅法。使⽤用起来更加简洁

实现函数中代码+ (Student *)studentWithName:(NSString *)name sex:(NSString *)sex hobby:(NSString *)hobby age:(NSInteger)age number:(NSInteger)number
{return [[Student alloc] initWithName:name sex:sex hobby:hobby age:age number:number];
}主函数内代码Student *student1 = [Student studentWithName:@"wangw" sex:@"man" hobby:@"xuexi" age:18 number:12];

转载于:https://www.cnblogs.com/limicheng/p/3807502.html

iOS学习笔记---oc语言第三天相关推荐

  1. iOS学习笔记---oc语言第八天

    属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性  eg:@property NSSstring *name;相当于@interface中声明了两 ...

  2. IOS学习笔记07---C语言函数-scanf函数

    2013/8/7 IOS学习笔记07---C语言函数-scanf函数 ------------------------------ qq交流群:创梦技术交流群:251572072            ...

  3. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  4. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  5. IOS学习笔记05---C语言程序的开发运行过程

    IOS学习笔记05---C语言程序的开发运行过程 0 5.C语言3-C语言程序的开发运行过程 ----------------------------------------------------- ...

  6. IOS学习笔记03---C语言概述

    IOS学习笔记03---C语言概述 0 3.C语言1-C语言概述         qq交流群:创梦技术交流群:251572072                        创梦网络赚钱群:2483 ...

  7. x%3e=y%3e=z的c语言表达式,我的C语学习笔记-C语言教程(三).doc

    我的C语学习笔记- C语言教程(三) C语言教程---第一章: C语言概论 C语言教程---第二章: 数据类型.运算符.表达式 C语言教程---第三章: C语言程序设计初步 C语言教程---第四章: ...

  8. 黑马程序员- IOS学习笔记-OC三大特性

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 封装 set方法 1.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 ...

  9. nltk和python的关系_NLTK学习笔记(一):语言处理和Python

    目录 nltk资料下载 import nltk nltk.download() 其中,download() 参数默认是all,可以在脚本里面加上nltk.download(需要的资料库) 来进行下载 ...

最新文章

  1. 【最详细解析】1070 结绳 (25分)_18行代码AC
  2. 你还在Java8中使用循环语句吗?
  3. codefroces 297E Mystic Carvings
  4. 如何在eclipse中装myeclipse的插件
  5. 获取zabbix监控数据
  6. 每天至少保证4个小时在学习知识
  7. python笔记05_多线程
  8. Redux 入门 -- 处理 async action
  9. EtherCAT中AX58100烧写xml文件的说明(2)-TwinCAT软件安装
  10. Python3读写dbf文本
  11. Kingbase8开发版,启动提示FATAL: XX000: max_connections should be less than orequal than 10
  12. 表的创建(create),修改(alter)和删除(drop)
  13. k线图的分析小技巧以及买入卖出信号
  14. 大数据必学语言Scala(三十一):scala面向对象 特质(trait)
  15. mac idea 触控板 缩放 字体大小
  16. Ubuntu16.04、Ubuntu18.04、Ubuntu20.04分区方案
  17. VELO3D将推出1米高的大型工业3D金属打印机,Knust-Godwin成为首家客户
  18. 深入理解C++中的循环引用问题及解决方法
  19. Class类(基本介绍、常用方法)
  20. 8、 谷歌离线地图开发教程

热门文章

  1. Android把数组从大到小排列,Android SparseArray 排序
  2. html盒子模型子元素怎么水平占满父元素_前端面试常考问题之css盒模型
  3. python字典键值可以是元组或列表吗_Python列表、元组、字典、集合的内置使用方法...
  4. 小程序和android联调,小程序打开APP指定页面
  5. oracle存储过程无效字符_Oracle中无效存储过程的重新编译方法
  6. python 单一继承定义_Python学习之单继承与多继承
  7. oracle脚本如何写,怎样写sql脚本
  8. Dubbo管理端安装
  9. 上传下载文件到Linux服务器
  10. linux部署Oracle数据库--安装篇