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

2.继承

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



#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



#import "SonB.h"


@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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值