面向对象的三大特性:封装,继承,多态。

1、继承

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

把公共的方法和实例变量写在子类,子类只需要写父类独有的实例变量和方法即可。

继承是面向对象三大特性之一,合理的继承,能减少很多冗余代码,加快开发速度。

 1. 继承的特点:

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

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

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

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

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

 2. super

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

  作?:给super发消息,可以执??类该?法的实现 。

  重写从?类继承过来的?法的三种情况:

   • 完全以?类的实现内容为主,丢弃?类实现的内容。  

   • 完全以?类的实现内容为主,没有?类实现的内容。

   • 既有?类对该?法的实现,也有?类对该?法的实现。

 3.消息发送机制

2、初始化方法

 1.初始化方法

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

  初始化?法在对象的整个?命周期?只使??次。

  注:初始化?法是在对象的初始化阶段完成其实例变量的赋值操作,?个对象的初始化阶段只有?次,所以初始化?法只使??次。

 1 - (id)init {
2   //给super发送init消息:执??类中实现的init?法
3   self = [super init];
4   //判断从?类继承过来的init?法是否初始化成功
5   if (self) {
6   //初始化设置
7   }
8   //返回初始化完成的对象
9   return self;
10 }

  ?类定义了除?类中公共实例变量之外的实例变量。

  在??的初始化?法中,优先向super发送init消息,初始化公共变量, 初始化成功之后,再初始化??特有变量,从?完成全部实例变量的初始化。

 2.self

  self是系统关键字。 self在?法中指代当前?法的调?者。

  self在实例?法中,指代调?当前?法的对象。

  - (void)objectMethod {

  }

  self在类?法中,指代当前类。

+ (void)classMethod {

}

 3. 初始化方法特征

  • 初始化?法是 "_"?法。

  • id 或者 instancetype 类型的返回值。

  • 以init开头。

  • 可以带 0 到多个参数。

  内部实现:先执?super的初始化?法,再初始化??变量,后return self

 4. 初始化过程

  • ??的初始化?法中,优先调??类的初始化?法。
  • ?类的初始化?法中再调??类的初始化?法,依次往上调?。
  • 处于最上层的初始化完成之后,回到第?层的初始化?法中, 完成第?层的初始化。
  • 第?层的初始化完成之后,回到第三层的初始化?法中,依次执?初始化?法,直到本类的初始化?法完成。

 5. 指定初始化方法

  命名规则:以initWith开头,后面跟上参数列表

1 - (id)initWithName:(NSString *)name gender:(NSString *)gender {
2 self = [super init];
3 if (self) {
4 _name = name;
5 _gender = gender;
6 }
7 return self;
8 }

3、便利构造器

 1. 封装了对象创建过程

  内部实现:封装了alloc和初始化操作,创建对象更加简便快捷。

 2. 特征

  • 便利构造器是 "+" ?法。

  • 返回本类型的实例。

  • ?法名以类名+ With + 参数列表。

  • 可以有 0 到多个参数。

 3. 便利构造器声明,实现和调用

  声明:

1    + (id)personWithName:(NSString *)name gender:(NSString *)gender;

  实现:

1 + (id)personWithName:(NSString *)name gender:(NSString *)gender {
2
3 return [[Person alloc] initWithName:namegender:gender];
4
5 }

  调用:

1 Person *per = [Person personWithName:@"Frank" gender:@"男"];

iOS开发-继承特征详解的更多相关文章

  1. iOS开发技巧系列---详解KVC(我告诉你KVC的一切)

    KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...

  2. iOS开发——GCD多线程详解

    GCD多线程详解 1. 什么是GCD Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,简单来说,GCD就是iOS一套解决多线程的机制,使用GCD能够最大限度简化多线程 ...

  3. ios开发之--UIViewContentMode详解

    在开发当中有时会有这样的需求,将从服务器端下载下来的图片添加到imageView 当中展示,但是下载下来的图片尺寸大小不固定,宽高也有可能不成比例 如果直接设置imageView的image属性而不设 ...

  4. iOS中—触摸事件详解及使用

    iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分 ...

  5. iOS 单元测试之XCTest详解(一)

    iOS 单元测试之XCTest详解(一) http://blog.csdn.net/hello_hwc/article/details/46671053 原创blog,转载请注明出处 blog.csd ...

  6. IOS—UITextFiled控件详解

    IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...

  7. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

  8. SpringMVC【开发Controller】详解

    前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方法接收参数 字符串转日期 重定向和转发 返回JSON ...

  9. C++的三种继承方式详解以及区别

    目录 目录 C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 前言 我发 ...

随机推荐

  1. 【CJOJ2499】【DP合集】棋盘 chess

    Description 给出一张 n × n 的棋盘,格子有黑有白.现在要在棋盘上放棋子,要求: • 黑格子上不能有棋子 • 每行每列至多只有一枚棋子 你的任务是求出有多少种合法的摆放方案.答案模 1 ...

  2. FTP环境搭建及客户代码调用公共方法封装

    一.背景 大型系统架构往往被分解为多个独立可运行的组件, 以满足性能.可靠性.可扩展性的需求.多个组件间的数据交互往往采用两种方式:小量数据通过Sock函数.RMI.WebService等接口方式传递 ...

  3. jstl的表达式不能解析

    问题:配置问题 解决:web.xml中添加环境的配置,环境配成2.4的版本就ok了 <web-app xmlns="http://java.sun.com/xml/ns/j2ee&qu ...

  4. python多线程、多进程以及GIL

    多线程 使用threading模块创建线程 传入一个函数 这种方式是最基本的,即调用threading中的Thread类的构造函数,然后指定参数target=func,再使用返回的Thread的实例调 ...

  5. 【python学习笔记】9.魔法方法、属性和迭代器

    [python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...

  6. python引用和对象详解

    python引用和对象详解 @[马克飞象] python中变量名和对象是分离的 例子 1: a = 1 这是一个简单的赋值语句,整数 1 为一个对象,a 是一个引用,利用赋值语句,引用a指向了对象1. ...

  7. 使用c#对MongoDB进行查询(1)

    1.BsonDocument对象 在MongoDB.Bson命名空间下存在一个BsonDocument类,它是MongoDB的文档对象,代表着MongoDB中不规则数据一条条实体模型.可以使用Bson ...

  8. 所使用的“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”版本高于所引用的程序集“EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”的版本

    错误信息:所使用的"EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&qu ...

  9. Shiro【授权、整合Spirng、Shiro过滤器】

    前言 本文主要讲解的知识点有以下: Shiro授权的方式简单介绍 与Spring整合 初始Shiro过滤器 一.Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro ...

  10. VMware安装Centos6.4及CentOS的基本设置

    1.vmware安装vmware tools实现与本地磁盘文件夹的共享 2.设置Centos网络 vmware采用nat方式.虚拟机网络使用虚拟网卡(VMware Network Adapter VM ...