問題

我原來是一個Java程式設計師,現在使用Objective -C.我想建立一個抽象類,但在Objective -C中似乎不可能.這可能嗎?

如果沒有,我可以在Objective-C中獲得如何接近抽象類?

  最佳答案

通常,Objective-C類僅按慣例抽象 – 如果作者將一個類作為抽象文件,只是在不對其進行子類化的情況下不使用它.但是,沒有阻止抽象類例項化的compiletime強制執行.事實上,沒有任何東西可以阻止使用者透過類別(即在執行時)提供抽象方法的實現.您可以透過在類中提出這些抽象方法實現中的異常強制使用者至少覆蓋某些方法:

 [NSException raise:NSInternalInconsistencyException 
            format:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)];
 

如果您的方法返回一個值,則更容易使用

 @throw [NSException exceptionWithName:NSInternalInconsistencyException
                               reason:[NSString stringWithFormat:@"You must override %@ in a subclass", NSStringFromSelector(_cmd)]
                             userInfo:nil];
 

因此,您不需要從方法中新增一個返回語句。

如果抽象類實際上是一個介面(即沒有具體的方法實現),使用Objective-C協議是更合適的選項。

  相同標籤的其他問題

objective-cabstract-class