OC面向对象—继承

一、基本概念

程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量)。

在这里动物是猫类和狗类的父类,黑猫和白猫类是猫类的子类。

继承的好处:

(1)抽取出了重复的代码

(2)建立了类和类之间的联系

继承的缺点:

耦合性太强

二、OC中的继承

@interface Animal:NSObject

//动物里继承了NSObject,获得NSObject类的方法;

@end

@interface Dog :Animal

//dog类继承Animal类

@end

注意:OC语言是单继承语言。在oc语言中,基本上所有类的根类都是NSObject类。

三、继承的使用注意

(1)编译器从上往下执行,所以在子类前面至少应该要有父类的声明;

(2)OC中不允许子类和父类拥有相同名称的成员变量名;

(3)OC中的子类可以拥有和父类相同名称的方法,在子类调用时,优先去自己的内部寻找,如果没有则一层一层的往上找;

提示:重写即子类重新实现了父类中的某个方法,覆盖了父类以前的实现。

示意图:一共有三个类,Person类继承了NSObject类,Student类继承了Person类。

创建一个Student *s=[[Student alloc] init];

此时会把Student类和这个类的父类加载进内存。

提示:每个类中都有一个super class指针,该指针指向自己的父类。对象中有一个isa指针,该指针指向调用该对象的类。

四、继承和组合

继承的适用场合:

(1)当两个类拥有相同的属性和方法时,就可以将相同的属性和方法抽取到一个父类中。

(2)当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类(考虑),在这种情况下,也可以考虑使用组合。

继承:###是xxx,如狗是动物,可以让狗继承动物类

组合:###拥有xxx,如学生有书,可以让书这个类作为学生类的属性

五、关键字super

Super关键字,在子类中重写方法时,可以让调用者跳过这一层而调用父类中的方法。

作用:

(1)直接调用父类中的某一个方法

(2)Super处在对象方法中,那么就会调用父类的对象方法;super处于类方法中,那么就会调用父类的类方法。

使用场景:子类在重写父类方法时,想要保留父类的一些行为。

OC面向对象—继承的更多相关文章

  1. OC面向对象继承关系和组合关系笔记

    继承关系是描述类和类之间的关系,两个类分别称为子类和父类,子类继承了父类,子类就拥有了父类的属性和方法: 继承的关系特点描述出来就是:** “是” **  (例如:学生类 是 人类) 组合关系描述的语 ...

  2. OC面向对象—封装

    OC面向对象—封装 一.面向对象和封装 面向对象的三大特性:封装(成员变量).继承和多态 在OC语言中,使用@interface和@implementation来处理类. @interface就好像暴 ...

  3. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...

  4. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...

  5. 李洪强iOS开发之OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态. 在使用多态是,会进行动态检测,以调用真实的对象方法. 多态在代码中的体现即父类指针指向子类对象. ...

  6. OC面向对象的三大特征

    OC面向对象的三大特征 1.OC面向对象的三大特封装 1)封装:完整的说是成员变量的封装. 2)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可 ...

  7. OC基础--继承

    继承的基本概念: 现实生活中的继承: 人类是一个基类(也称做父类),通常情况下所有人类所共同具备的特性,如有手有脚能吃能喝 按照生活常规,我们继续给人类来细分的时候,我们可以分为学生类 工人类等,学生 ...

  8. 面向对象继承实例(a如何继承b)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. js面向对象继承

    前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...

随机推荐

  1. php操作Mysql 以及封装常用的函数 用外连接连接3个表的案例

    <?php header("content-type;text/html;charset=utf-8"); //数据库连接define('DB_HOST','localhos ...

  2. Leetcode: Can I Win

    In the "100 game," two players take turns adding, to a running total, any integer from 1.. ...

  3. .NET学习记录1

    .NET 可以干什么呢? 1.桌面应用程序 (WinForm ) 2.internet 应用程序(asp.net) 3.手机应用开发(wp7)好像现在C#也能开发android应用了 现在主要有两个方 ...

  4. 使用 greenDao 框架 操作数据库

    0.效果图

  5. win10查看连接过的wifi密码

    cmd窗口 运行   “netsh wlan show profiles name="linasd" key=clear”

  6. samba的rpm包,只有tar.gz文件安装

    tar.gz包是源代码的包,不能直接运行,需要安装tar xvf samba-3.5.1.tar.gz cd samba-3.5.1 &&cd source3 &&./ ...

  7. Flyer(二分 HDU4768)

    Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  8. R----DT包介绍学习

    DT包:查看矩阵或数据框的内容 12 library(DT)datatable(iris, options = list(pageLength = 5)) DT包提供大量UI定制功能,即修改展示的HT ...

  9. Eclipse开发过程中个VM Arguments的设置

    Eclipse开发过程中个VM Arguments的设置 1:jre中的Default VM Arguments: -Xms256M -Xmx640M -XX:PermSize=256m -XX:Ma ...

  10. HDU1848 Fibonacci again and again SG函数

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...