Обобщенные типы

@interface Vehicle : NSObject
-(void) test;
@end

@interface Car : Vehicle
@end

@interface Truck : Vehicle
@end

@implementation Vehicle : NSObject
-(void) test {
    //Implementation
}
@end

@implementation Car : Vehicle
@end

@implementation Truck : Vehicle
@end

NSMutableArray<Vehicle *> *list = [NSMutableArray new];
Vehicle *vehicle = [Vehicle new];
Car *car = [Car new];
Truck *truck = [Truck new];

[list addObject: vehicle];
[list addObject: car];
[list addObject: truck];

for (Vehicle *vehicle in list) {
    [vehicle test];
}