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)它的部分属性是你想要的,可以抽取出另一个父类