为什么OC中Foundation下特殊的类不能被继承

Foundation框架下的类几乎都不能被继承。这是因为这些类并不是单一的一个类,而是包含了很多子类,这些子类是在.m文件才声明的,故不能被继承,只能被本类所使用。然后父类中有一些方法只是做了声明,并没有实现,这些方法在子类中才被实现。如果你继承了一个字符串,然后调用一些工厂类的方法,因为你并没有继承到字符串类(NSString)中的子类,而这些子类才实现了一些工厂方法,所以就会出错。

下面简写一个字符串类来模仿NSString

#import <Foundation/Foundation.h>


@interface AZString : NSObject


+ (AZString *)stringWithA;

+ (AZString *)stringWithB;


@end


@interface AZString (copyString) 

- (void)method1;

- (void)method2;

@end


#import "AZString.h"


@interface AZCFString : AZString


@end


@interface AZTappPointerString : AZString


@end


@implementation AZString


+ (AZString *)stringWithA

{

    AZCFString * str = [[AZCFString alloc] init];

    return str;

}


+ (AZString *)stringWithB

{

    AZTappPointerString * str = [[AZTappPointerString alloc] init];

    return str;

}


@end



@implementation AZCFString


- (void)method1

{

    NSLog(@"XXXXXX");

}

- (void)method2

{

    NSLog(@"TTTTTTT");

}


@end



@implementation AZTappPointerString


- (void)method1

{

    NSLog(@"XXXXXX");

}

- (void)method2

{

    NSLog(@"TTTTTTT");

}


@end

可以看到创建一个AZString字符串时,并不是父类创建的,而是一些子类来创建,但是这些子类声明在父类的.m文件中,不能被继承,所以当你继承了AZString后,一旦调用stringWithA就会出错。因为根本在的你继承类中没有AZCFString这个子类。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值