Objective-C语言_面向对象(继承)

来源:互联网 发布:山东工商学院网络课 编辑:程序博客网 时间:2024/06/05 19:34

main.m

#import <Foundation/Foundation.h>#import "Father.h"#import "NotSon.h"#import "Son.h"#import "SonA.h"#import "SonB.h"int main(int argc,const char * argv[]) {    @autoreleasepool{    #pragma mark -----------继承-------------------    /*     继承:继承是避免冗余,提高代码的可重用和可维护性的有效手段          (书P54)     继承的传递性:直接父类、间接父类          继承需要符合的关系: is-a         子类和父类都需要满足 is-a的关系,才存在继承关系。     继承概念下的 is-a关系是个单向的关系          子类具有父类的属性和行为,以及自身特殊的属性和行为     要记住 X is-a Y隐喻着X可以做出任何Y可以做出的事情,而且还有可能会做出更多的事情     */        /*     继承的特点     1.使用继承可以实现代码的重用,减少代码冗余     2.OC中一个类可以继承另一个类,被继承的类称为父类 或者超类(基类),继承的类称为子类 或者派生类(孩子类)     3.子类可以直接"拥有"父类所有允许子类继承的属性和方法     4.子类可以改变父类中已有的方法,执行不同的代码实现     5.OC中只允许单一继承,因为多重继承会有称为"致命方块"的问题(P57)     */        Father *father = [[Fatheralloc]init];    //点语法的本质是setter和 getter    father.name = @"Jack";    [father sayHello];    [father charge];        //如果这样写代码就会十分的冗余了,并且这样写没有遵循面向对象的一个重要原则:write once,only once    NotSon *notSon = [[NotSonalloc]init];    notSon.name = @"notSon";    [notSon sayHello];    [notSon charge];        Son *son = [[Sonalloc]init];    [son charge];        son.name = @"Rick";    son.homeAddress = @"GZ";    [son sayHello];    [son race];    #pragma mark -------------NSObject中常用的方法及其功能----------        /*     NSObject中常用的方法及其功能     1.方法: +(id)alloc     功能:返回一个分配好内存的对象     说明:已经分配号内存的对象的实例变量会被初始化成默认值          2.方法: +(init)     功能:对已经分配内存大的实例变量初始化(相当于便利初始化函数)     不一定要默认的便利初始化函数,也可以自己写     说明:常见形式     -(id)init     {        if(self = [super init])        {            //初始化        }        return self ;     }          3.方法:+(id)new     功能:同时调用了 alloc和 init          4.方法: -(Class)class            +(Class)class     功能:返回当前对象所属类          5.方法:-(Class)superclass            +(Class)superclass     功能:返回当前对象的父类          6.方法: -(BOOL)isKindOfClass:(Class)aClass        功能:判定receiver是否为Class的实例        说明:判断某个实例是否属于某个类或者子类          7.方法:-(BOOL)isMemberOfClass:(Class)aClass        功能:判断receiver是否为Class的实例        说明:只能判断某个实例是否属于某个类,不能判断是否属于某个父类          8.+(BOOL)isSubclassOfClass:(Class)aClass        功能:判断是否为aClass的子类        说明:判断是否某个类的子类          9.-(BOOL)respondsToSelector:(SEL)aSelector        功能:判断receiver是否响应某个消息,不包括类方法          10.+(BOOL)InstancesRespondToSelector:(SEL)aSelector        功能:判断类的对象是否响应某消息          11.-(BOOL)conformsToProtocol:(Protocol *)aProtocol        功能:判断是否实现某协议          12.-(id)retain        功能:对象引用计数+1          13.-(oneway void)release     功能:对象引用计数 -1          14.-(id)autorelease        功能:对象引用计数-1,且向autoreleasepool发送消息          15.-(NSUInteger)retainCount        功能:返回当前引用计数          16.-(void)perfromSelector:(SEL)aSelector                withObject:(id)anArgument                afterDelay:(NSTiemInvterval)delay;        功能:隔指定时间之后进行方法调用          */            }    return 0;}

Father.h

#import <Foundation/Foundation.h>@interface Father : NSObject@property (nonatomic,strong)NSString *name;@property (nonatomic,assign)NSInteger age ;@property (nonatomic,strong)NSString *hobby ;-(void)sayHello ;-(void)charge ;@end

Father.m

<pre name="code" class="objc">#import "Father.h"@implementation Father-(void)sayHello{    NSLog(@"Hello everybody,my name is %@",self.name);}-(void)charge{    NSLog(@"随便刷,刷刷刷!!!");}@end


NotSon.h

#import <Foundation/Foundation.h>@interface NotSon : NSObject@property (nonatomic,strong)NSString *name;@property (nonatomic,assign)NSInteger age ;@property (nonatomic,strong)NSString *hobby ;-(void)sayHello ;-(void)charge ;@end

NotSon.m

#import "NotSon.h"@implementation NotSon-(void)sayHello{    NSLog(@"Hello everybody,my name is %@",self.name);}-(void)charge{    NSLog(@"随便刷,刷刷刷!!!");}@end

SonA.h

#import "Father.h"@interface SonA : Father@end


SonA.m
#import "SonA.h"@implementation SonA-(void)sayHello{    [super sayHello];    NSLog(@"I am SonA");}@end

SonB.h

#import "Father.h"@interface SonB : Father@end

SonB.m

@implementation SonB-(void)sayHello{    [super sayHello];    NSLog(@"I am SonB");}@end


Son.h

#import "Father.h"//@interface 类名:父类名 ,在OC中,使用冒号表示一个类继承了另一个类。冒号的含义是扩展,意味着子类除了继承了父类的属性和方法外,还可以扩展出自己的特殊属性和方法(一般情况下,我们继承于NSObject类,可以获取NSObject类中的大量有用的特性)@interface Son : Father@property (nonatomic,strong)NSString *homeAddress ;//自己的方法-(void)race ;@end

Son.m

#import "Son.h"@implementation Son//重写父类的charge方法-(void)charge{    /*     重写继承中的方法     特点:        1.发生在父类和子类之间        2.方法名相同,参数列表相同,返回类型相同     */    NSLog(@"拿老爸的卡出来刷一下);}@end


0 0