我试图理解多态性和继承。我在这方面没有太多经验。我基本上想要做的是有一个通用的 BaseFileLogic 类,可以从包中打开一个文件。我有 BaseFileLogic 类的子类,它们的文件名作为这些特定子类的常量。这个想法基本上适用于从 iTunes 共享中拖动我指定的文件名的人,我可以打开该文件并为我的不同对象类型解析它。所以我的 BaseFileLogic 类非常简单,有一个类和指定的初始化程序:
- (id)initWithFileName:(NSString *)fileName fileLocation:(FileLocation)fileLocation {
if (self = [super init]) {
_currentFile = fileName;
NSString *filePath = nil;
if (fileLocation == FileLocationBundle) {
filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"csv"];
}
else {
filePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:_currentFile];
}
_parser = [[CHCSVParser alloc] initWithContentsOfCSVFile:filePath];
_parser.delegate = self;
}
return self;
}
+ (id)baseFileLogicWithFileName:(NSString *)fileName fileLocation:(FileLocation)fileLocation {
return [[CRBaseFileLogic alloc] initWithFileName:fileName fileLocation:fileLocation ];
}
现在在我的 RoastLogic 课程中,到目前为止我有这个:
@interface CRRoastFileLogic : CRBaseFileLogic
+ (id)roastFileLogicFromFileLocation:(FileLocation)fileLocation;
@end
@implementation CRRoastFileLogic
+ (id)roastFileLogicFromFileLocation:(FileLocation)fileLocation {
CRBaseFileLogic *cr = [CRBaseFileLogic baseFileLogicWithFileName:(NSString *)kRoastFileName fileLocation:fileLocation];
NSLog(@"cr: %@", [cr description]);
return cr;
}
@end
当我打印出描述时,cr 对象的类型是 CRBaseFileLogic。我想在这部分我很困惑,因为我想创建一个 CRRoastFileLogic 的实例,但是使用我在超类中声明的方法。继承/多态应该如何工作?