--------------- FKBase.h ---------------
#import
<Foundation/Foundation.h>
@interface
FKBase : NSObject
- ( void ) base;
- ( void ) test;
- ( void ) base;
- ( void ) test;
@end
--------------- FKBase.m ---------------
#import
"FKBase.h"
@implementation
FKBase
- ( void ) base
{
- ( void ) base
{
NSLog(@"父类的普通base方法");
}
- ( void ) test
{
- ( void ) test
{
NSLog(@"父类的将被覆盖的test方法");
}
@end
--------------- FKSubclass.h ---------------
#import
<Foundation/Foundation.h>
#import
"FKBase.h"
@interface
FKSubclass : FKBase
- ( void ) sub;
- ( void ) sub;
@end
--------------- FKSubclass.m ---------------
#import
"FKSubclass.h"
@implementation
FKSubclass
- ( void ) test
{
- ( void ) test
{
NSLog(@"子类的覆盖父类的test方法");
}
- ( void ) sub
{
- ( void ) sub
{
NSLog(@"子类的sub方法");
}
@end
---------------
main.m
---------------
#import
<Foundation/Foundation.h>
#import "FKSubclass.h"
int
main()
{
// 声明 hello 时使用 NSObject 类,则 hello 的编译时类型是 NSObject ,
// NSObject 是所有类的父类 , 但 hello 变量的实际类型是 NSString
NSObject* hello = @"Hello" ;
// 使用 isKindOfClass 判断该变量所指的对象是否为指定类、及其子类的实例
NSLog( @" 字符串是否是 NSObject 类的实例: %d" , ([hello isKindOfClass:[NSObject class]]));
NSLog( @" 字符串是否是 NSString 类的实例: %d" , ([hello isKindOfClass:[NSString class]]));
NSLog( @" 字符串是否是 NSDate 类的实例: %d" , ([hello isKindOfClass:[NSDate class]]));
NSString* a = @"Hello" ;
NSLog( @"a 是否是 NSDate 类的实例: %d" , ([a isKindOfClass:[NSDate class]]));
{
// 声明 hello 时使用 NSObject 类,则 hello 的编译时类型是 NSObject ,
// NSObject 是所有类的父类 , 但 hello 变量的实际类型是 NSString
NSObject* hello = @"Hello" ;
// 使用 isKindOfClass 判断该变量所指的对象是否为指定类、及其子类的实例
NSLog( @" 字符串是否是 NSObject 类的实例: %d" , ([hello isKindOfClass:[NSObject class]]));
NSLog( @" 字符串是否是 NSString 类的实例: %d" , ([hello isKindOfClass:[NSString class]]));
NSLog( @" 字符串是否是 NSDate 类的实例: %d" , ([hello isKindOfClass:[NSDate class]]));
NSString* a = @"Hello" ;
NSLog( @"a 是否是 NSDate 类的实例: %d" , ([a isKindOfClass:[NSDate class]]));
}
一、编写本节代码的具体步骤:
1.可仿照第二章001节的代码编写步骤,不同的是,本节代码要创建两个类。
二、本节代码涉及到的知识点:
1.-(BOOL)isKindOfClass:clazz: 判断该对象是否为clazz或其子类的实例。
2.-(BOOL)isSubclassOfClass:clazz: 判断该对象是否为clazz的子类的实例。
3.上面两个方法可以使用任何对象作为调用者,接着向该方法传入任意类,
该方法将会返回一个BOOL类型的值,用于表明该变量实际指向对象的类型。
4.在执行强制类型转换之前,先判断一下前一个对象是否是该类的实例,是否可以成功转换。