OC三大特性之--继承

1、基本介绍

继承是类中的一个重要的特性,他的出现使得我们没必要别写重复的代码,可重用性很高。当然OC中的继承和Java中是一样的,没多大区别,这里在看一个例子吧:

首先来看一下父类:Car

Car.h

 1 #import
 2
 3 @interface Car : NSObject{
 4     NSString *_brand;
 5     NSString *_color;
 6 }
 7
 8 - (void)setBrand:(NSString *)brand;
 9 - (void)setColor:(NSString *)color;
10 - (void)brake;
11 - (void)quicken;
12
13 @end 

在Car类中定义了两个属性,以及一些方法

Car.m

 1 #import "Car.h"
 2
 3 @implementation Car
 4 - (void)setBrand:(NSString *)brand{
 5     _brand = brand;
 6 }
 7 - (void)setColor:(NSString *)color{
 8     _color = color;
 9 }
10 - (void)brake{
11     NSLog(@"刹车");
12 }
13 - (void)quicken{
14     NSLog(@"加速");
15 }
16 @end

方法的实现

在来看一下子类:

Taxi.h

 1 #import "Car.h"
 2
 3 @interface Taxi : Car{
 4     NSString *_company;//所属公司
 5 }
 6
 7 //打印发票
 8 - (void)printTick;
 9
10 @end

看到Taxi类继承了父类Car,这里需要导入父类的头文件,然后在Taxi类中多了一个属性和方法

Taxi.m

 1 #import "Taxi.h"
 2
 3 @implementation Taxi
 4
 5 - (void)printTick{
 6     [super brake];
 7     [self brake];
 8     NSLog(@"%@出租车打印了发票,公司为:%@,颜色为:%@",_brand,_company,_color);
 9 }
10
11 @end

对方法的实现,这里我们看到实现文件中是不需要导入父类Car的头文件的,因为可以认为,Taxi.h头文件中已经包含了Car的头文件了。而且,这里可以使用super关键字来调用父类的方法,同时这里我们也是可以用self关键字来调用,这里看到其实这两种方式调用的效果是一样的,当我们在子类重新实现brake方法的时候(Java中的重写概念),那么这时候super关键字调用的还是父类的方法,而self调用的就是重写之后的brake方法了。同样,我们也是可以使用父类中的属性。

再看一下另外一个子类:

Truck.h

 1 #import "Car.h"
 2 //卡车类继承Car
 3 @interface Truck : Car{
 4     float _maxWeight;//最大载货量
 5 }
 6
 7 //覆盖父类的方法brake
 8 //优先调用子类的方法
 9 - (void)brake;
10
11 - (void)unload;
12
13 @end

这里就自己定义了一个brake方法,这时候就会覆盖父类中的brake方法了。

Truck.m

 1 import "Truck.h"
 2
 3 @implementation Truck
 4
 5 - (void)brake{
 6     [super brake];
 7     NSLog(@"Truck类中的brake方法");
 8 }
 9
10 - (void)unload{
11     [super brake];//调用父类的方法
12     [self brake];//也是可以的
13     NSLog(@"%@的卡车卸货了,载货量:%.2f,汽车的颜色:%@",_brand,_maxWeight,_color);
14 }
15
16 @end

这里就可以看到,我们会在brake方法中调用一下父类的brake方法,然后在实现我们自己的逻辑代码。

2、继承的其他知识点

1.    继承的专业术语

父类\超类  superclass

子类  subclass\subclasses

2.    继承的细节

单继承

子类和父类不能有相同的成员变量

方法的重写

3.    super关键字

分别调用父类的对象方法和类方法

4.    继承的好处

不改变原来模型的基础上,拓充方法

建立了类与类之间的联系

抽取了公共代码

坏处:耦合性强

5.    继承的使用场合

它的所有属性都是你想要的,一般就继承

它的部分属性是你想要的,可以抽取出另一个父类

6.子类方法和属性的访问过程:

如果子类没有,就去访问父类的

父类被继承了还是能照常使用的

父类的静态方法

画继承结构图,从子类抽取到父类

NSObject的引出:全部OC类的最终父类,包含了一些常用方法,比如+new

3、例子

设计两个类Bird、Dog

 1 // Bird的声明
 2 @interface Bird : NSObject
 3 {
 4 @public
 5     int weight;
 6 }
 7 - (void)eat;
 8 @end
 9 // Bird的定义
10 @implementation Bird
11 - (void)eat {
12     NSLog(@"吃吃吃-体重:%d", weight);
13 }
14 @end
15 // Dog的声明
16 @interface Dog : NSObject
17 {
18 @public
19     int weight;
20 }
21 - (void)eat;
22 @end
23 // Dog的定义
24 @implementation Dog
25 - (void)eat {
26     NSLog(@"吃吃吃-体重:%d", weight);
27 }
28 @end
29     有相同的属性和行为,抽出一个父类Animal(先抽取weight属性,再抽取eat方法)
30 // Animal的声明
31 @interface Animal : NSObject
32 {
33 @public
34     int weight;
35 }
36 - (void)eat;
37 @end
38 // Animal的定义
39 @implementation Animal
40 - (void)eat {
41     NSLog(@"吃吃吃-体重:%d", weight);
42 }
43 @end
44     子类在父类的基础上拓充属性和方法
45 // Bird的声明
46 @interface Bird : Animal
47 {
48 @public
49     int height;
50 }
51 - (void)fly;
52 @end
53
54 // Bird的定义
55 @implementation Bird
56 - (void)fly {
57     NSLog(@"飞飞飞-高度:%d", height);
58 }
59 @end
60
61 // Dog的声明
62 @interface Dog : Animal
63 {
64 @public
65     int speed;
66 }
67 - (void)run;
68 @end
69 // Dog的定义
70 @implementation Dog
71 - (void)run {
72     NSLog(@"跑跑跑-高度:%d", speed);
73 }
74 @end
时间: 2024-10-20 16:49:11

OC三大特性之--继承的相关文章

OC三大特性之继承

一.基本概念 继承是面向的三大特征之一,指的是在一个类的基础上,定义一个新类:原本的类成为父类(基类),新类称为子类(派生类). 生活中,继承的例子也是数不胜数,比如一个儿子继承了他父亲,那么他就享受他父亲的财产了,当然不是全部,详细解释见下文. 在这里Animal是Dog类和Brid类的父类. 继承的好处: 抽取出了重复的代码 建立了类和类之间的联系 不改变原来模型的基础上,拓充方法 继承的缺点: 耦合性太强 二.OC中的继承 @interface Animal:NSObject //动物里继

【转】java提高篇(二)-----理解java的三大特性之继承

[转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句话中最引人注目的是"复用代码",尽可能的复用代码使我们程序员一直在追求的,现在我来介绍一种复用代码的方式,也是java三大

java随笔:三大特性之继承

Java三大特性之继承 一.介绍 笔记重点:构造器.protected关键字(这个自行查阅).向上转型.private关键字(继承非常重要的要点)  复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句话中最引人注目的是"复用代码",尽可能的复用代码使我们程序员一直在追求的. 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继

(1) 深入理解Java面向对象三大特性 封装 继承 多态

转眼已经工作快6年了,最开始做了2年J2EE:然后整了2年的数据仓库,主要是Cognos的报表开发:现在从事4G LTE核心网的开发,用的语言任然是Java,但写代码的机会不多,基本都是看代码找BUG,偶尔做点new feature也是在比较成熟的框架上复制.粘贴.修改,大部分时间还是在理解业务,钱多.事少.离家近,当时来这家公司图的是后面2点,2年过去了,英文水平有所提升,对敏捷开放也有一定的了解,但技术方面明显退步了或者说没有进步吧,本来以前也不怎么好,因为工作上用不到,自己也没怎么学习,所

面向对象的三大特性之继承-基础知识总结------彭记(05)

面向对象的三大特性之继承: js中的某些对象没有一些需要的属性和方法,但是另外的对象有,那么拿过使用,就是继承. js中继承的实现方式: 1.混入式继承:通过循环将一个对象中的所有属性和方法混入到另外一个对象中: var me={ work:function(){ console.log('敲代码'): } }: var mayun={ money:9999999, car:'000', manager:function(){ console.log('管理巴巴...'); } } /*遍历,让

[转载]CSS三大特性(继承、优先级、层叠)之个人见解

首先声明一下CSS三大特性——继承.优 先级和层叠.继承即子类元素继承父类的样式,比如font-size,font-weight等f开头的css样式以及text-align,text- indent等t开头的样式以及我们常用的color.简单的就不演示了,强调一下font-size这个东东(虽然也有继承,但是标签不同继承的效果也 不一样),比如下面的代码: <!DOCTYPE html> <html lang="en"> <head> <met

面向对象编程三大特性之继承

面向对象编程有三大特性:继承,封装,多态~ 从object基类开始,逐步向下开枝散叶,组成了整个对象体系. 为什么要用这种形式? 解答这个问题之前,我们可以先回顾一下生物的进化史~ 从单细胞开始到现在的哺乳动物,在不断地进化中,物种的身体结构愈加复杂,这种进化所花费的时间非常漫长,但是一旦进化成功,后代就可以直接拥有父母的结构,而不用再次花费漫长的时间用来进化. 现在我们再次回到继承上来,object基类支持 .NET Framework 类层次结构中的所有类,并为派生类提供低级别服务.这是 .

java基础篇(二) ----- java面向对象的三大特性之继承

java面向对象的三大特性之继承: 复用代码是java众多引人注目的功能之一,但是想要成为极具革命性的语言,仅仅是复制代码并对其加以改变是不够的.它必须能够做更多的事.引自<Think in java>    而代码复用也是程序员一直不断追求的.由此来说下代码复用的一种方式 java面向对象的三大特性--继承!! 在面向对象程序设计中,继承机制可以有效地组织类的结构.确定类之间的关系,在已有类的基础上开发新的类.继承机制在程序代码复用.提高软件开发效率.降低软件系统维护成本等方面具有重要作用.

面向对象的三大特性之继承

# 面向对象的三大特性之继承 # 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好 (如机器人) # 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好 (动物--猫) # 继承同时有两种含义:1,继承基类的方法,并且做出自己的改变或扩展(代码重用),这种意义并不大,因为它使子类和基类出现强耦合 # 2,声明某个子类兼容于某基类.定义一个接口类,子类继承接口类,并实现接口中定义的方法 # 接口继承只是接口类规定了子类必须实现的方法,但是接口类里不去实现,子类