我的iOS学习历程 - OC第三天
2015-10-28 21:58
441 查看
今天主要讲的是OC继承的使用 创建一个父类 使用其相同的属性来创建子类 子类继承任何父类的属性和方法(点击打开链接 附带一个例题,名字为继承类)
#import<Foundation/Foundation.h>
#import"Person.h"
#import"Student.h"
#import"LStudent.h"
int main(int argc,constchar *
argv[]) {
继承的:特性
1.继承是单向的(从上到下)
2.继承是可传递的
3.不能相互继承
4.不能多继承
5.继承就是子类继承父类的所有实例变量和方法
继承的:好处
1.减少代码量提高工作效率
创建人类
学生类继承人类
L学生类 继承学生类
3.继承中方法的调用
1.使用self调用方法的时候
优先调用本类中的方法没有继续查找上一级,找到就调用,没有就继续查找都没有就崩溃
2.使用super调用方法的时候
直接跳过本类去查找上一级的父类,找到就调用没有就继续查找都没有就崩溃
super没有一个特殊的意思就是一个编译器指令
***************************************************************************************
(peson,h)
(person,m)
***************************************************************************************
(Student .h)
(Student.m)
在本类中可以使用关键字self当作本类对象来调用本类中方法(self的调用方法是先从本类中找方法,如果本类中找不到,就去父类找,就这样循环,一直找到基类,找不到就崩溃)
@end
#import<Foundation/Foundation.h>
#import"Person.h"
#import"Student.h"
#import"LStudent.h"
int main(int argc,constchar *
argv[]) {
继承的:特性
1.继承是单向的(从上到下)
2.继承是可传递的
3.不能相互继承
4.不能多继承
5.继承就是子类继承父类的所有实例变量和方法
继承的:好处
1.减少代码量提高工作效率
创建人类
学生类继承人类
L学生类 继承学生类
// 创建一个对象 Person *p1 = [[Person alloc]initWithName:@"小明" gander:@"男" age:@"18"]; [p1 sayHi]; // 创建一个学生 Student *s1 = [[Studentalloc]init]; // 学生类中本没有init方法该方法是从基类中继承过来的 // 通过set方法赋值 // 学生类本没有 name这个实例变量和 set方法现在使用的都是从父类(Person)中继承下来的 [s1 setName:@"亚索"]; [s1 setAge:@"18"]; [s1 setGander:@"男"]; [s1 sayHi]; // 给学生加一个学号 [s1 setNumber:@"1"]; [s1 sayHiStudernt];</span>
3.继承中方法的调用
1.使用self调用方法的时候
优先调用本类中的方法没有继续查找上一级,找到就调用,没有就继续查找都没有就崩溃
2.使用super调用方法的时候
直接跳过本类去查找上一级的父类,找到就调用没有就继续查找都没有就崩溃
super没有一个特殊的意思就是一个编译器指令
***************************************************************************************
(peson,h)
#import <Foundation/Foundation.h> @interfacePerson :NSObject { NSString *_name; // 姓名 NSString *_gander; // 性别 NSString *_age; // 年龄 } // 自定义初始化方法 // set get 方法 // sayHi方法(介绍自己) -(instancetype)initWithName:(NSString *)name gander:(NSString *)gander age:(NSString *)age; // 名字的set,get方法 -(NSString *)name; -(void)setName:(NSString *)name; // 性别的set,get方法 -(NSString *)gander; -(void)setGander:(NSString *)gander; // 年龄的set,get方法 -(NSString *)age; -(void)setAge:(NSString *)age; // 自我介绍 -(void)sayHi; @end
(person,m)
<span style="font-size:18px;">#import "Person.h" @implementation Person -(instancetype)initWithName:(NSString *)name gander:(NSString *)gander age:(NSString *)age{ self = [superinit]; if (self) { _name = name; _gander = gander; _age = age; } returnself; } // 名字的set,get方法 -(NSString *)name{ return_name; } -(void)setName:(NSString *)name{ _name = name; } // 性别的set,get方法 -(NSString *)gander{ return_gander; } -(void)setGander:(NSString *)gander{ _gander = gander; } // 年龄的set,get方法 -(NSString *)age{ return_age; } -(void)setAge:(NSString *)age{ _age = age; } // 自我介绍 -(void)sayHi{ NSLog(@"我的名字叫%@性别%@今年%@岁",_name,_gander,_age); } @end</span>
***************************************************************************************
(Student .h)
<span style="font-size:18px;">#import "Person.h" @interface Student :Person { NSString *_number; } // 自定义初始化 -(instancetype)initWithName:(NSString *)name gander:(NSString *)gander age:(NSString *)age number:(NSString *)number; // 遍历构造器 +(instancetype)studentWithName:(NSString *)name gander:(NSString *)gander age:(NSString *)age number:(NSString *)number; // number set,get方法 -(NSString *)number; -(void)setNumber:(NSString *)number; // 自我介绍 -(void)sayHiStudernt;</span>
(Student.m)
<span style="font-size:18px;">#import "Student.h" @implementation Student // 自定义初始化 -(instancetype)initWithName:(NSString *)name gander:(NSString *)gander age:(NSString *)age number:(NSString *)number{ // 继承中的自定义初始化方法 // 赋值实例变量的时候需要先判断一下继承是否成功 // 也就是调用父类的初始化方法 self = [superinitWithName:namegander:ganderage:age]; if (self){ // 如果继承成功的话就继续初始化子类中特有的实例变量 _number = number; } // 继承失败直接返回就行 returnself; } // 遍历构造器 +(instancetype)studentWithName:(NSString *)name gander:(NSString *)gander age:(NSString *)age number:(NSString *)number{ Student *stu = [[Studentalloc]initWithName:namegander:ganderage:agenumber:number]; return stu; } // number set,get方法 -(NSString *)number{ return_number; } -(void)setNumber:(NSString *)number{ _number = number; }</span>
在本类中可以使用关键字self当作本类对象来调用本类中方法(self的调用方法是先从本类中找方法,如果本类中找不到,就去父类找,就这样循环,一直找到基类,找不到就崩溃)
// 自我介绍 -(void)sayHiStudernt{ // 调用这个方法打印全部信息 // 先去调用父类的方法 sayHi然后在打印学好输入完整信息 [supersayHi]; // super是一个编译器指令可以通过该指令直接跳过本类的方法直接去调用父类的方法(上一级的父类) NSLog(@"%@",_number); }
@end
相关文章推荐
- IOS开发笔记21-ARC与分类
- IOS--导航栏
- IOS 控制系统音量
- IOS开发笔记20-OC内存管理
- iOS设计模式 - 访问者
- #在蓝懿学习iOS的日子#Day6
- 蓝懿iOS 技术内容和心得 10。28技术内容交流和心得分享
- iOS数据持久化的几种方式
- IOS开发笔记19-OC特有语法
- 零基础ios开发(五 深入理解继承—植物大战僵尸 )
- iOS开发 关于iBeacon的一些记录
- IOS开发笔记18-继承
- IOS开发笔记17-封装
- 【10/28】 iOS开发成长之路,【tableView】
- iOS 7大手势
- iOSCoreAnimation动画系列教程(二):CABasicAnimation
- ios开发系列之页面跳转
- 类似于IOS弹出底部对话框
- iOS三方—SDWebImage的使用
- 【iOS开发】transform属性的使用