您的位置:首页 > 职场人生

黑马程序员-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调用父类的方法。 

例:

主函数:

#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>、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息