黑马程序员-继承

一.继承概述

继承是 OC 语法中, 非常重要的一个特性.这个概念与我们在实际生活当中的"继承"不完全一样,所一不能完全和生活中作比较. 比如,我们父母有房子,他们过世后,我们就会继承这个房子.但是在OC 中并不一样.如果非要拿这个例子来做正确的解释应该是:

我们自己拥有了一个房子,在刚刚拥有这个房子的时候,这个房子的布局分割,尺寸,每个物品的摆放等等全部和父母房子相同,但是这个时候我们房子中是看不见这些东西的(不用在子类中写父类中已经有的代码).

但是,一旦我们想要把这个房子中的东西(之前存在的),进行一些美化操作时候,比如把椅子刷成红色,那么这个时候,这个椅子就要在我们房子中出现了,因为我们要实实在在拿到这个父母房子中的椅子,才可以真正的进行刷成红色的操作.我们在刚刚拥有的时候,我们说父母的房子里的东西都是我们,但是只是说说而已,一旦进行修改,那么就必须拿到父母房子中的那个真实存在的东西,进行修改. 这里说的比繁琐,简单的用代码来解释"继承"这个词,比如我们有 A,B 两个类,  类继承了A类,我们在 A 类中先前已经创建一个属性叫做 name,那么  类直接就可以打印出 B.name 这 个属性. 这个时候其实 A 中的 name 已经存在于B 中了,只不过没有写在B 的文件中,如果 B 再创建一个叫做 name 的属性的话,就会提示报错,重复创建. 这个就是我们开始说的"只是说说"而已. 当我们有需要,需要对 name 的 setter 方法进行重写的时候,就需要在 B 中实实在在写出 -setName: 这个方法,进行操作.这就是我后边提到的"必须拿到父母房子中的那个真实存在的东西,进行修改".

更深一点体会,我们在 B 类中写-setName 的时候,会出现智能提示.这也侧面说明了我们之前的论证我们直接下边来看代码例子:

二.代码继承实例:

 Person 类,和 Student 类

学生是人,那么也就是 Student 类继承了 Person 类

Person 类,如下:

Student 类,如下:

此时我们, Student 类已经重写Person 类中的 talk 方法.这时候,我们创建Student对象,执行 talk 方法 ,打印出的是 "Student----跑"而不是"Person----跑".

当然,我们Student 类中,不重写 talk 方法,如下边这样:

我们创建Student对象,执行 talk 方法 ,打印出的是"Person----跑". 因为这里我们 Student 没有对 Person 中的 talk 进行重写

到这里是不是对继承有一点点认识了呢

 

三.继承的好处

  (1)  二者具有相同的属性和行为,在编写代码过程中,会出现重复代码,影响效率。
(2)建立了类与类之间的关系
(3)子类可以拥有父类中的所有成员变量和方法
(4)子类可以在不改变父类的基础上,拓展成员变量和方法

三. 继承的注意点
(1)基本上所有类的基类是NSObject。
(2)父类必须写在子类前面。
(3)不允许子类和父类拥有相同名称的成员变量。
(4)子类方法和属性的访问过程:如果子类没有,就去父类中寻找。
(5)父类被继承了并不影响父类的使用,还是能照常使用。

四.继承的缺点
  耦合性太强,类的关联太强.

 

posted @ 2015-12-03 22:13  coderQin  阅读(121)  评论(0)    收藏  举报