协议
@protocol Song <NSObject>
@end
Animal对象实现协议Song并定义泛型 ObjectType
#import <Foundation/Foundation.h>
#import "Song.h"
@interface Animal <__covariant ObjectType : ObjectA * > : NSObject <Song>
@end
Dog对象继承Animal对象
#import <Foundation/Foundation.h>
#import "Animal.h"
/// 没有自己的类型
@interface Dog <ObjectType : ObjectA *> : Animal <ObjectType>
@end
/// 有自己的类型ObjectB
@interface Dog <ObjectType : ObjectB *> : Animal <ObjectType>
@end
Golden对象继承Dog对象并定义自己具体类型
#import "Dog.h"
#import "xxxObject.h"
NS_ASSUME_NONNULL_BEGIN
@interface Golden : Dog <OjectC *> <协议1>
@end
NS_ASSUME_NONNULL_END