06-继承

1、继承的概念

  Dog类:具有 _age(年龄) 和 _weight(体重) 的属性,和 run(跑) 的行为(方法);

  Cat类:具有 _age(年龄) 和 _weight(体重) 的属性,和 run(跑) 的行为(方法);

  二者具有相同的属性和行为,在编写代码过程中,会出现重复代码,影响效率。

因此,我们抽取两个类的共性,定义一个动物类Animal。

狗和猫都是动物,所以可以说Dog和Cat类继承Animal类,Dog和Cat称为Animal的子类,Animal称为Dog和Cat的父类。

继承是代表两个类之间的关系: XXX  是  XXX

假设有2个类:类A 类B,类B是类A  例如:Student 是  Person

    类B 继承 类A,则类B就具有类A 的所有成员变量和方法。 代码表示为 B : A   英文冒号  : 代表继承的意思

    Student 继承 Person,则Student是Person的子类,Person是Student的父类。

:NSObject 说明NSObject是基本上所有类的基类,它没有父类。

OC中有两个基类: NSObject  和 NSProxy,但是一般都用NSObject。

先看代码:    

 1 #import <Foundation/Foundation.h>
 2 /*
 3  1.继承的好处:
 4  1> 抽取重复代码
 5  2> 建立了类之间的关系
 6  3> 子类可以拥有父类中的所有成员变量和方法
 7  
 8  2.注意点
 9  1> 基本上所有类的根类是NSObject
10  */
11 
12 
13 /********Animal的声明*******/
14 @interface Animal : NSObject
15 {
16     int _age;
17     double _weight;
18 }
19 
20 - (void)setAge:(int)age;
21 - (int)age;
22 
23 - (void)setWeight:(double)weight;
24 - (double)weight;
25 @end
26 
27 /********Animal的实现*******/
28 @implementation Animal
29 - (void)setAge:(int)age
30 {
31     _age = age;
32 }
33 - (int)age
34 {
35     return _age;
36 }
37 
38 - (void)setWeight:(double)weight
39 {
40     _weight = weight;
41 }
42 - (double)weight
43 {
44     return _weight;
45 }
46 @end
47 
48 /********Dog*******/
49 // : Animal 继承了Animal,相当于拥有了Animal里面的所有成员变量和方法
50 // Animal称为Dog的父类
51 // Dog称为Animal的子类
52 @interface Dog : Animal
53 @end
54 
55 @implementation Dog
56 @end
57 
58 /********Cat*******/
59 @interface Cat : Animal
60 @end
61 
62 @implementation Cat
63 @end
64 
65 int main()
66 {
67     Dog *d = [Dog new];
68     
69     [d setAge:10];
70     
71     NSLog(@"age=%d", [d age]);
72     return 0;
73 }

2、继承的好处

(1)抽取重复代码

(2)建立了类与类之间的关系

(3)子类可以拥有父类中的所有成员变量和方法

(4)子类可以在不改变父类的基础上,拓充成员变量和方法

3、注意点

(1)基本上所有类的基类是NSObject。

(2)父类必须写在子类前面。

(3)不允许子类和父类拥有相同名称的成员变量。

(4)子类方法和属性的访问过程:如果子类没有,就去父类中寻找。

(5)父类被继承了并不影响父类的使用,还是能照常使用。

4、缺点

  耦合性太强,类的关系太紧密。

5、重写

  重写:子类重新实现父类中的某个方法,重写会覆盖父类以前的做法。

6、继承的专业术语

  父类/超类 superclass

  子类 subclass/subclsaaes

7、继承的细节

  (1)单继承

  (2)子类和父类不能拥有相同的成员变量

  (3)方法的重写

 8、继承的使用场合

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

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

人生之路,不忘初心,勿忘始终!
原文地址:https://www.cnblogs.com/xdl745464047/p/3999166.html