黑马程序员-ios学习笔记 oc 继承
2015-07-27 21:25
633 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
oc继承
一、继承的定义:即指一个对象直接使用另一个对象的属性和方法。
如下图:
基类、父类—————————————>动物
动物的子类,麻雀或金鱼的父类————>鸟或鱼
鸟或鱼的子类、派生类————————>麻雀、黄鹂鸟、鲨鱼、金鱼
二、继承的代码实现
1、基类和派生类之间的关系
派生类方法属性=基类方法属性+派生类自己新增方法和属性
注:1)基类的私有属性能被继承,不能被使用;
2)oc中的继承是单继承:就是一个类只能有一个父类,不能继承多个父类;
3)继承的合理性。
2、方法的重写:从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。
注:1)重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法,不会引起冲突;
2) 从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义;不用考虑父类中 方法已存在的问题;
3)重写后,子类可以通过super调用父类的方法。
例:
主函数:
父类声明:
子类实现:
3、继承的注意事项
1)子类不能定义和父类同名的变量,但是可以继承父类的变量 ;
2)OC类支持单一继承,不支持多继承
3)OC类支持多层继承
4、继承体系中方法调用的顺序
1)在自己类中找
2)如果没有,去父类中找
3)如果父类中没有,就去父类的父类中
4)如果父类的父类也没有,就还往上找,直到找到基类(NSObject)
5)如果NSObject也没有就报错
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
oc继承
一、继承的定义:即指一个对象直接使用另一个对象的属性和方法。
如下图:
基类、父类—————————————>动物
动物的子类,麻雀或金鱼的父类————>鸟或鱼
鸟或鱼的子类、派生类————————>麻雀、黄鹂鸟、鲨鱼、金鱼
二、继承的代码实现
1、基类和派生类之间的关系
派生类方法属性=基类方法属性+派生类自己新增方法和属性
注:1)基类的私有属性能被继承,不能被使用;
2)oc中的继承是单继承:就是一个类只能有一个父类,不能继承多个父类;
3)继承的合理性。
2、方法的重写:从父类继承的方法,可能这个方法并不适合子类,可以在子类中重写父类的方法。
注:1)重写之后,父类的对象调用父类的方法;子类的对象,调用子类的方法,不会引起冲突;
2) 从父类继承的方法,不适用于子类时,可以直接声明父类的同名方法,并定义;不用考虑父类中 方法已存在的问题;
3)重写后,子类可以通过super调用父类的方法。
例:
主函数:
#import <Foundation/Foundation.h> #import "Animal.h" #import "Bird.h" int main(int argc, const char * argv[]) { @autoreleasepool { Animal *ani=[Animal new]; //创建animal指针变量ani ani.name=@"Animal"; //调用animal写入名字 ani.age=99; //调用animal写入年龄 [ani eat]; //调用animal的eat方法 [ani run]; //调用animal的ren方法 NSLog(@"名字:%@\t年龄:%d",ani.name,ani.age); //输出 Bird *bird=[Bird new]; //创建bird指针变量bird bird.name=@"百灵鸟"; //继承父类animal的方法写入名字 bird.age=5; //继承父类animal的方法写入年龄 NSLog(@"名字:%@\t年龄:%d",bird.name,bird.age); //输出 bird.wing=2; //给bird自身方法赋值 [bird eat]; //调用父类animal的eat方法 [bird run]; //调用父类方法run的重写 [bird fly]; //调用bird自身的方法fly NSLog(@"%d岁的%@用%d支翅膀在天空飞翔!",bird.age,bird.name,bird.wing);//输出 } return 0; }
父类声明:
@interface Animal : NSObject { NSString *_name; //定义成员变量name int _age; //定义成员变量age } -(void)setName:(NSString *)name;//name的set方法声明 -(NSString *)name; //name的get方法声明 -(void)setAge:(int)age; //age的set方法声明 -(int)age; //age的get方法声明 -(void)eat; -(void)run; @end父类实现:
#import "Animal.h" @implementation Animal -(void)setName:(NSString *)name{ //name的set方法实现 _name=name;} -(NSString *)name{ //name的get方法实现 return _name;} -(void)setAge:(int)age{ //age的set方法实现 _age=age;} -(int)age{ //age的get方法实现 return _age;} -(void)eat{ NSLog(@"animal在津津有味的吃着!"); } -(void)run{ NSLog(@"naimal在疯跑!"); } @end子类声明:
#import "Animal.h" @interface Bird : Animal { int _wing; } -(void)setWing:(int)wing; -(int)wing; -(void)eat; //调用父类eat方法 -(void)fly; -(void)run; //父类方法run的重写 @end
子类实现:
#import "Bird.h" @implementation Bird -(void)setWing:(int)wing{ _wing=wing;} -(int)wing{ return _wing;} -(void)eat{ [super eat]; //通过super调用父类的方法 } -(void)fly{ NSLog(@"brid在天空自由的翱翔!"); } -(void)run{ //父类方法run重写的实现 NSLog(@"brid在疯跑!"); } @end
3、继承的注意事项
1)子类不能定义和父类同名的变量,但是可以继承父类的变量 ;
2)OC类支持单一继承,不支持多继承
3)OC类支持多层继承
4、继承体系中方法调用的顺序
1)在自己类中找
2)如果没有,去父类中找
3)如果父类中没有,就去父类的父类中
4)如果父类的父类也没有,就还往上找,直到找到基类(NSObject)
5)如果NSObject也没有就报错
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
相关文章推荐
- PostgreSQL教程(三):表的继承和分区表详解
- Lua面向对象之类和继承浅析
- 浅析Ruby中继承和消息的相关知识
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++实现不能被继承的类实例分析
- js继承 Base类的源码解析
- Javascript 面向对象 继承
- JavaScript 继承使用分析
- Javascript面向对象编程(二) 构造函数的继承
- javascript面向对象之Javascript 继承
- JavaScript 对象、函数和继承
- 关于JavaScript的面向对象和继承有利新手学习
- JavaScript 继承详解(一)
- JavaScript 继承详解(二)
- javascript继承的六大模式小结
- JavaScript中的原型和继承详解(图文)
- JavaScript中继承用法实例分析
- Javascript中3种实现继承的方法和代码实例
- 通过继承IHttpHandle实现JS插件的组织与管理
- JS继承用法实例分析