类方法继承使用小思

之前对类方法的继承一直很朦胧,今日看着书突然想通了,写了个例子证实了下想法

下面是两个类,一个是父类CCFather, 一个是子类CCSon继承自CCFather

#import <Foundation/Foundation.h>

@interface CCFather : NSObject

- (NSString *)name;

+ (NSString *)classNameOfSelf;

- (void)doSth;

@end

#import "CCFather.h"

@implementation CCFather

- (NSString *)name {
    return @"Father";
}

+ (NSString *)classNameOfSelf {
    return @"CCFather";
}

- (void)doSth {
    NSLog(@"classNameOfSelf: %@", [[self class] classNameOfSelf]);
}

@end

#import "CCFather.h"

@interface CCSon : CCFather

@end

#import "CCSon.h"

@implementation CCSon

- (NSString *)name {
    return @"Son";
}

+ (NSString *)classNameOfSelf {
    return @"CCSon";
}

@end


验证的代码在下面,关键在于调用类方法的时候不要直接使用[xxClassName xxFunction];而跟对象方法一样,使用[[self class] xxFunction],这样在实时运行时会根据对应的class去调用对应的class方法,就像例子中的 doSth方法一样

    CCFather *f = [[CCFather alloc] init];
    
    CCSon *son = [[CCSon alloc] init];
    
    NSLog(@"father: %@ %@", f.name, [CCFather classNameOfSelf]);
    
    [f doSth];
    
    NSLog(@"son: %@ %@", son.name, [CCSon classNameOfSelf]);
    
    [son doSth];

输出结果是如下,最核心的结果是分别调用doSth方法,CCSon的输出的ClassName是CCSon,CCFather输出的ClassName是CCFather,在子类中正确的调用了被子类覆盖的类方法,而不用在CCSon中覆盖doSth方法,再明确的调用[CCSon classNameOfSelf]

2014-02-12 00:21:39.674 Demo[1044:907] father: Father CCFather

2014-02-12 00:21:39.675 Demo[1044:907] classNameOfSelf: CCFather

2014-02-12 00:21:39.676 Demo[1044:907] son: Son CCSon

2014-02-12 00:21:39.676 Demo[1044:907] classNameOfSelf: CCSon



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值