iOS中实现Java中抽象类不能直接实例化的办法

我们模拟一个抽象类: People,下面是.h文件

#import 
//抽象类,不能直接实例化,需要子类继承才能初始化
@interface People : NSObject
//抽象方法,不能直接调用,需要子类重写方法
- (id)doSomething:(id)arg;

@end

下面是.m文件

#import "People.h"

@implementation People

- (instancetype)init {
    //禁止调用People类的实例方法
    if([self isMemberOfClass:[People class]]){
        //doesNotRecognizeSelector:告诉系统某个方法没有实现,并且抛出异常
        //也就是说子类必须要重写init方法才行
        //_cmd在Objective-C的方法中表示当前方法的selector,这里就是表示init方法
        [self doesNotRecognizeSelector:_cmd];
        return nil;
    }else{
        self = [super init];
        if(self){
            
        }
        return self;
    }
}

- (id)doSomething:(id)arg
{
    NSLog(@"%@",NSStringFromSelector(_cmd));
    //_cmd,这里就表示doSomething:方法
    //子类必须重写doSomething:方法,否则会crash
    [self doesNotRecognizeSelector:_cmd];
    return nil;
}

@end

你可能感兴趣的:(iOS中实现Java中抽象类不能直接实例化的办法)