Person类和Animal类的父类是NSObject,Dog类的父类是Animail类
#import <Foundation/Foundation.h> #import "Dog.h" #import "Person.h"
int main(int argc, const char * argv[]) { @autoreleasepool { Animal *ani = [Animal new]; //ani是Animal类的实例对象 //动态类型检测: //1.判断类型 //1)判断某个对象是否是类的实例对象,或者子类的实例对象(对象和类) //isKindOfClass使用格式:[对象 isKindOfClass 类对象]; BOOL isInstance = [ani isKindOfClass:[Animal class]];
Dog *dog = [Dog new]; isInstance = [dog isKindOfClass:[Animal class]]; // 1 dog是Animal子类Dog的实例对象,所以是1
isInstance = [ani isKindOfClass:[Animal class]]; // 1 ani是Animal类的实例对象,所以是1
//2)isMemberOfClass 判断对象是否是指定类的实例对象(对象和类) //格式: [对象 isMemberOfClass: 类对象]
isInstance = [ani isMemberOfClass:[Animal class]]; // 1 ani是Animal类的实例对象,所以是1
isInstance = [dog isMemberOfClass:[Animal class]]; // 0 dog是是Animal子类Dog的实例对象,而非Animal的实例对象,所以是0
NSLog(@"%d",isInstance);
//3)isSu判断类是否是指定类的子类(类和类之间的关系) //格式:[类A isSubclassOfClass:类B]; //判断 类A 是不是 类B 的子类,是返回 1,不是返回 0.
BOOL isSub = [Dog isSubclassOfClass:[Animal class]]; // 1 Dog继承自Animal isSub = [[dog class] isSubclassOfClass:[ani class]];
// 后面的类对象必须获取出来,不能直接写类名,前面的可以直接写类名或获取的方法都可以
isSub = [Person isSubclassOfClass:[Animal class]]; // 0 Person 不是Animal的子类
isSub = [Animal isSubclassOfClass:[Dog class]]; // 0 继承顺序错误
NSLog(@"isSub = %d",isSub);
} return 0; }
|