/*
Objective-c - NSObject万能指针
里氏替换原则:
父类的指针指向子类的对象,对程序没有任何的影响,这就是里氏替换原则.
NSObject类是所有OC类的父类,根据里氏替换原则,NSObject指针可一直想任意的OC对象.
当NSObject指针指向子类对象的时候,如果要调用子类对象独有的方法,就必须做类型转换.
NSObject指针是一个万能指针.
当指针类型是(NSObject *)类型的时候,编译器要做编译检查.
NSObject指针的局限性,只能使用中括弧调用方法,不能使用点语法.
如下代码:
*/
#import <Foundation/Foundation.h>
#pragma mark -
#pragma mark 人类的创建
//声明
@interface YYPerson : NSObject
@property NSString *name;
@property int age;
- (void)sayHi;
@end
//实现
@implementation YYPerson
- (void)sayHi
{
NSLog(@"大家好!我叫%@,我今年%d岁了!", _name, _age);
}
@end
#pragma mark -
int main(int argc, const char * argv[]) {
//创建人类对象
YYPerson *xiaoming = [YYPerson new];
//赋值属性
xiaoming.name = @"小明";
xiaoming.age = 18;
//调用方法
[xiaoming sayHi];
//创建人类对象(父类指针指向子类对象)
NSObject *xiaohua = [YYPerson new];
[(YYPerson *)xiaohua setName:@"小花"];//NSObject指针的局限性,只能使用中括弧调用方法,不能使用点语法.
[(YYPerson *)xiaohua setAge:20];
//当NSObject指针指向子类对象的时候,如果要调用子类对象独有的方法,就必须做类型转换.否则就会报错.
[(YYPerson *)xiaohua sayHi];
return 0;
}