【学习笔记】【OC语言】继承

1.继承的基本用法

 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 }

子类方法和属性的访问过程:如果子类没有,就去访问父类的
父类被继承了还是能照常使用的
父类的静态方法
画继承结构图,从子类抽取到父类
NSObject的引出:全部OC类的最终父类,包含了一些常用方法,比如+new

2.继承的专业术语
父类\超类  superclass
子类  subclass\subclasses

3.继承的细节
单继承
子类和父类不能有相同的成员变量
方法的重写

4.super关键字
分别调用父类的对象方法和类方法

 1 /*
 2  僵尸
 3
 4  跳跃僵尸、舞王僵尸、铁桶僵尸
 5  */
 6 #import <Foundation/Foundation.h>
 7
 8 /*
 9  super的作用
10  1.直接调用父类中的某个方法
11  2.super处在对象方法中,那么就会调用父类的对象方法
12    super处在类方法中,那么就会调用父类的类方法
13
14  3.使用场合:子类重写父类的方法时想保留父类的一些行为
15  */
16
17 // 僵尸
18 @interface Zoombie : NSObject
19 - (void)walk;
20
21 + (void)test;
22 - (void)test;
23
24 @end
25
26 @implementation Zoombie
27 - (void)walk
28 {
29     NSLog(@"往前挪两步******");
30 }
31
32 + (void)test
33 {
34     NSLog(@"Zoombie+test");
35 }
36
37 - (void)test
38 {
39     NSLog(@"Zoombie-test");
40 }
41 @end
42
43 // 跳跃僵尸
44 @interface JumpZoombie : Zoombie
45 + (void)haha;
46 - (void)haha2;
47 @end
48
49
50 @implementation JumpZoombie
51
52 + (void)haha
53 {
54     [super test];
55 }
56
57 - (void)haha2
58 {
59     [super test];
60 }
61
62 - (void)walk
63 {
64     // 跳两下
65     NSLog(@"跳两下");
66
67     // 走两下(直接调用父类的walk方法)
68     [super walk];
69     //NSLog(@"往前挪两步----");
70
71 }
72 @end
73
74 int main()
75 {
76     //[JumpZoombie haha];
77     JumpZoombie *jz = [JumpZoombie new];
78
79     [jz haha2];
80
81     return 0;
82 }

5.继承的好处
不改变原来模型的基础上,拓充方法
建立了类与类之间的联系
抽取了公共代码
坏处:耦合性强

6.继承的使用场合
它的所有属性都是你想要的,一般就继承
它的部分属性是你想要的,可以抽取出另一个父类

7.代码

 1 /*
 2  1.重写:子类重新实现父类中的某个方法,覆盖父类以前的做法
 3  2.注意
 4  1> 父类必须声明在子类的前面
 5  2> 子类不能拥有和父类相同的成员变量
 6  3> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找
 7
 8  2.坏处:耦合性太强
 9  */
10
11 #import <Foundation/Foundation.h>
12 // Person
13 @interface Person : NSObject
14 {
15     int _age;
16 }
17
18 - (void)setAge:(int)age;
19 - (int)age;
20
21 - (void)run;
22
23 + (void)test;
24
25 @end
26
27 @implementation Person
28
29 + (void)test
30 {
31     NSLog(@"Person+test");
32 }
33
34 - (void)run
35 {
36     NSLog(@"person---跑");
37 }
38
39 - (void)setAge:(int)age
40 {
41     _age = age;
42 }
43 - (int)age
44 {
45     return _age;
46 }
47 @end
48
49 // 不允许子类和父类拥有相同名称的成员变量
50 // Student
51 @interface Student : Person
52 {
53     int _no;
54     // int _age;
55 }
56
57 + (void)test2;
58
59 @end
60
61 @implementation Student
62 // 重写:子类重新实现父类中的某个方法,覆盖父类以前的做法
63 - (void)run
64 {
65     NSLog(@"student---跑");
66 }
67
68 + (void)test2
69 {
70     [self test];
71 }
72 @end
73
74
75 int main()
76 {
77     [Student test2];
78
79 //    Student *s = [Student new];
80 //
81 //    [s run];
82
83     return 0;
84 }

继承的使用场合

 1 /*
 2 1.继承的使用场合
 3  1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
 4  2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承A类
 5  A
 6  {
 7     int _age;
 8     int _no;
 9  }
10
11  B : A
12  {
13     int _weight;
14  }
15
16  // 继承:xx 是 xxx
17  // 组合:xxx 拥有 xxx
18
19  2.组合
20  A
21  {
22      int _age;
23      int _no;
24  }
25
26  B
27  {
28      A *_a;
29      int _weight;
30  }
31 */
32
33 @interface Score : NSObject
34 {
35     int _cScore;
36     int _ocScore;
37 }
38 @end
39
40 @implementation Score
41 @end
42
43 @interface Student : NSObject
44 {
45     // 组合
46     Score *_score;
47 //    int _cScore;
48 //    int _ocScore;
49     int _age;
50 }
51 @end
52
53 @implementation Student
54
55 @end
时间: 2024-10-15 14:55:35

【学习笔记】【OC语言】继承的相关文章

iOS学习笔记---oc语言第三天

继承.初始化方法 一.继承 继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量也继承过来了,只是不能访问) 面向对象提供了继承语法.能大大简化代码,把公共的方法和实例对象写在父类里.子类只需要写自己独有的实例变量和方法即可 继承既能保证类的完整,又能简化代码 继承特点 oc中只允许单继承 没有父类的类称为根类,oc中得根类是NSObject(祖宗) 继承的内容:所有的实例变量

iOS学习笔记---oc语言第四天

字符串 数组 一.使用苹果帮助文档 学会使?用苹果帮助?文档是开发者的?一项技能 Inherits from 继承?自 Conforms to 遵循什么协议 Framework 属于哪个框架 Availability 什么时候可?用的 Declared in 声明在什么头文件?里 Related documents 相关文档 Sample code ?示例代码 快速打开帮助文档 在代码中,将?鼠标停留在 类名或者?法名上,option+?鼠标左键,点击 Reference的超链接进?入帮助?文档

iOS学习笔记---oc语言第五天

字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key-value对)的数据 对于“name:张三”来讲,key就是“name”,key对应的value是“张 三” 一个key-value对认为是一个元素(实体),字典是存储key-value对 的容器. 特点: 与数组不同,数组靠下标存取数据,数组的下标是唯一的. 字典靠key存取元素.key不能重复,

iOS学习笔记---oc语言第六天

Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语?中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函数声明,即函数原型.例如:int sum(int x,int y);具有两个整型参 数,一个整型返回值的函数. 函数定义,即函数实现.例如:int sum(int x,int y){     retrun x + y;     } 回顾函数指针 函数指针(变量):存放函数地址(函数名)的指针变量.

iOS学习笔记---oc语言第二天

实例变量与方法 一.实例变量的可见度 二.方法 oc中的方法分两种:类方法和实例方法 类方法:只能类使用 eg:+ (id)alloc  注:类方法中不能使用实例变量 实例方法:只能对象使用,eg:- (void)sayHi iOS学习笔记---oc语言第二天

iOS学习笔记---oc语言第七天

类的扩展 NSDate是Cocoa中用于处理日期和时间的基础类,封装了某一给定的时刻,具体的日期 时间和时区 使用+date方法获取当前日期和时间 1 NSDate *date = [NSDate date];//获取当前时间 2 NSLog(@"%@",date);//无论你是哪个时区的时间,打印的总是o时区的时间 3 NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:60*60*8];//从现在开始之后的时间 4 NSLog(

ios学习笔记---c语言第二天

一.bool布尔类型    c语言没有bool类型,oc里有bool类型 是一种非真即假的数据类型,布尔类型的变量只有yes和no两个值.yes表示表达式是真,no表示表达式是假. 在c语言中认为非0即为真. 分支语句中常用bool值做判断,判断执行if语句还是else语句. 循环结构中,也常使用bool值做判断,判断是否要执行循环. 注意事项: #define yes 1 #define no 0 计算机在识别时,yes就替换成1,no就替换成0. 二.关系运算符 >   >=   <

iOS学习笔记---c语言学习第七天

结构体 结构体是一种自定义的数据类型 struct 结构体名 { 类型说明符  成员名: … 类型说明符  成员名: }: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { struct teacher{ char name[30]; char sex; int age; char course[30]; }; typedef struct teacher Teacher; Teacher c

iOS学习笔记---c语言第九天

高级指针 指向结构体变量的指针,称为结构体指针 可以使用->指向内容. %p打印地址 void pLenth(cPoint *p1,cPoint *p2) //求两点间的距离  用的开方函数sqrt()和平方函数pow(,) { float a = sqrt(pow((p1->x-p2->x), 2)+pow((p1->y-p2->y), 2)); printf("两点距离为%.2f\n",a); } //main.m中代码 #import <Fou

IOS学习笔记---C语言第四天

1 //?生成2个数组,每个数组都有10个元素,元素取值范围20-40之间,数组对应元素相 加,放到另外?一个数组中 2 #import <Foundation/Foundation.h> 3 4 int main(int argc, const char * argv[]) 5 { 6 7 int num1[10]={0},num2[10]={0},num3[10]={0}; 8 for (int i = 0; i<10; i++) { 9 num1[i]=arc4random()%2