1 __covariant(协变):用于泛型数据强转类型,可以向上强转,子类 可以转成 父类
2 __contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类 可以 转成子类
@interface NSMutableArray<ObjectType> : NSArray<ObjectType>
@end
@interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>
@end
@interface Language : NSObject
@end
@implementation Language
@end
@interface Java : Language
@end
@implementation Java
@end
@interface IOS : Language
@end
@implementation IOS
@end
// 声明泛型 __covariant(协变):用于泛型数据强转类型,可以向上强转,子类 可以转成 父类
@interface Person<__covariant ObjectType> : NSObject
// 语言
@property (nonatomic) ObjectType language;
@end
// 泛型父类 Language
Person<Language *> *p = [[Person alloc] init];
// 泛型子类 iOS
Person<IOS *> *iosP = [[Person alloc] init];
// 如果子类想给父类赋值,协变
p = iosP;
// __contravariant(逆变):用于泛型数据强转类型,可以向下强转, 父类 可以 转成子类
@interface Person<__covariant ObjectType> : NSObject
// 语言
@property (nonatomic) ObjectType language;
@end
// 泛型父类 Language
Person<Language *> *p = [[Person alloc] init];
// 泛型子类 iOS
Person<IOS *> *iosP = [[Person alloc] init];
// 如果父类想给子类赋值,逆变
iosP = p;