iOS study Day6- 继承

本文介绍了Objective-C中用于类和实例操作的方法:isMemberOfClass、isKindOfClass、respondsToSelector、instancesRespondToSelector 和 isSubclassOfClass。通过具体的Square和Rectangle类实例展示了如何使用这些方法来检查对象类型和响应选择器。

//

////本例主要理解

//isMemberOfClass

//isKindOfClass

//respondsToSelector

//instancesRespondToSelector

//isSubclassOfClass

//的使用。其中

//isMemberOfClass 方法返回该实例是否为某类创建的对象

//isKindOfClass   方法返回实例是否为某类及其子类创建的对象

//respondsToSelector  方法返回实例是否含有@selector方法

//instancesRespondToSelector  方法返回该类是否有@selector方法

//isSubclassOfClass    方法返回A类是否为B类的子类



#import "Square.h"

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[])

{


    @autoreleasepool {

        Square *sq = [[Square alloc] initWithSide:7];

        Rectangle *rec = [[Rectangle alloc] initWithWidth:5 andHeight:3];

        

        NSLog(@"sqs area = %i",[sq area]);

        NSLog(@"recs area =%i",[rec area]);

        NSLog(@"sqs parimeter = %i",[sq perimeter]);

        NSLog(@"recs parimeter = %i",[rec perimeter]);

        

        if ([sq isMemberOfClass:[Square class]])

            NSLog(@"sq is a member of square class");

        if ([sq isMemberOfClass:[Rectangle class]])

            NSLog(@"sq is a member of rectangle class");

        else

            NSLog(@"sq is not a member of rectangle class");

        if ([sq isMemberOfClass:[NSObject class]])

            NSLog(@"SQ is a member of nsobject class");

        else

            NSLog(@"SQ is not a member of nsobject class");

        if ([sq isKindOfClass:[Square class]])

            NSLog(@"sq is a kind of square class");

        if ([sq isKindOfClass:[Rectangle class]])

            NSLog(@"sq is a kind of rectangle class");

        if ([sq isKindOfClass:[NSObject class]])

            NSLog(@"SQ is a kind of nsobject class");

        if ([sq respondsToSelector:@selector(setSide:)])

            NSLog(@"sq response to [setSide] method.");

        if ([sq respondsToSelector:@selector(setWidth:andHeight:)])

            NSLog(@"sq response to [setWidth:andheight] method");

        if ([sq respondsToSelector:@selector(alloc)])

            NSLog(@"sq response to [alloc] method.");

        else

            NSLog(@"sq don't response to [alloc] method.");

        if ([Rectangle instancesRespondToSelector:@selector(setSide:)])

            NSLog(@"Rectangle response to [setSide:] method.");

        else

            NSLog(@"Rectangle don't response to [setSide:] method.");

        if ([Square isSubclassOfClass:[Rectangle class]] )

            NSLog(@"Square is a subclass of class Rectangle.");

    }

    return 0;

}


//rectangle.h


isMemberOfClass

isKindOfClass

respondsToSelector

instancesRespondToSelector

isSubclassOfClass


#import <Foundation/Foundation.h>


@interface Rectangle : NSObject


{

    int width;

    int height;

}


@property int width,height;


-(void)setWidth:(int)w andHeight:(int)h;


-(int)area;


-(int)perimeter;


-(id)initWithWidth:(int)w andHeight:(int)h;


@end



//rectangle.m


isMemberOfClass

isKindOfClass

respondsToSelector

instancesRespondToSelector

isSubclassOfClass


#import "Rectangle.h"




@implementation Rectangle


@synthesize width,height;



-(void)setWidth:(int)w andHeight:(int)h

{

    width = w;

    height  = h;

}


-(int)area

{

    return width * height ;

}


-(int)perimeter

{

    return (width + height) *2;

}


-(id)initWithWidth:(int)w andHeight:(int)h

{

    if (self = [super init])

    {

        [self setWidth:w andHeight:h];

    }

    return self;

}



@end




//Square.h


isMemberOfClass

isKindOfClass

respondsToSelector

instancesRespondToSelector

isSubclassOfClass


#import <Foundation/Foundation.h>

#import "Rectangle.h"


@interface Square : Rectangle


@property int side;


-(id)initWithSide:(int)s;


@end


//Square.m


isMemberOfClass

isKindOfClass

respondsToSelector

instancesRespondToSelector

isSubclassOfClass


#import "Square.h"


@implementation Square


@synthesize side;


-(void)setSide:(int)s

{

    width = s;

    height = s;

}


-(int)side

{

    return width;

}



-(id)initWithSide:(int)s

{

    if ([super init])

    {

        [self setSide:s];

    }

    

    return self;

}



@end



isMemberOfClass

isKindOfClass

respondsToSelector

instancesRespondToSelector

isSubclassOfClass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值