OC-011.OC中的继承

来源:互联网 发布:淘宝客户资源管理分析 编辑:程序博客网 时间:2024/05/19 14:37
OC中的继承机制是单继承的,一个子类只能有一个父类
OC支持多层继承的,A 继承 NSObject,B继承A这就称为多层继承

只有继承NSObject那么这个对象才有创建对象能力
NSObject是大部分类的基类(根类 root class)

当 A 类 继承 B类,那么A类就拥有B类中所有成员变量和方法(成员方法和类方法)
1、继承好处:代码重用
2、继承缺点:父类的改变影响所有的子类,子类与父类的耦合度很高

A类 继承 B类目的就是为了使用B类中的成员变量和方法(成员方法和类方法)


使用场景:
当我们发现一个类是另外一个类的时候就可以使用继承,例如学生是一个人,那么这个时候定义学生类的时候,就可以让学生继承人类
3、当子类中不想使用父类的方法,那么把父类的方法覆盖掉(成员方法和类方法)

在继承体系中方法调用的顺序
1、首先在本类中找
2、如果没有,去父类中找
3、如果父类中没有,就去父类的父类中
4、如果父类的父类也没有,就还往上找,直到找到基类(NSObject)

5、如果NSObject都没有就报错了

#import <Foundation/Foundation.h>//------main#import "LSStudent.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        LSPerson *per = [[LSPerson alloc] init];        [per setAge:60];        [per setName:@"龙爸爸"];        LSStudent *stu = [[LSStudent alloc] init];        [stu setAge:10];        [stu setName:@"龙叔叔"];        [stu show];  //打印age=10,name=龙叔叔           }    return 0;}
#import <Cocoa/Cocoa.h>//------LSperson.h@interface LSPerson : NSObject{    int _age;//年龄    NSString *_name;//姓名}- (void) setAge:(int) age;- (void) setName:(NSString *) name;- (void) say;//say方法- (void) show;//show方法@end
#import "LSPerson.h"//------LSPerson.m@implementation LSPerson- (void) setAge:(int) age{    _age = age;}- (void) setName:(NSString *) name{    _name = name;}- (void) say{    NSLog(@"我是一个人");}- (void) show{    NSLog(@"age = %d,name = %@",_age,_name);}@end
#import "LSPerson.h"//------LSStudent.h@interface LSStudent : LSPerson//- (void) show;@end
#import "LSStudent.h"//------LSStudent.m@implementation LSStudent//当子类中不想使用父类的方法,那么把父类的方法覆盖掉- (void) say{    NSLog(@"我是一个学生");}//- (void) show{//    NSLog(@"age = %d,name = %@",_age,_name); //子类拥有父类的所有成员变量和方法//}@end






0 0
原创粉丝点击