/*
多态:
同一种行为,对于不同的事物,具有完全不同的表现形式.
例如:
打招呼的行为,中国人和英国人的方式不一样
中国人会说:幸会幸会;
英国人会说:Nice to meet you!
如下代码:
创建人类,属性:姓名和国籍,有一个打招呼的方法.
创建中国人类和英国人类都继承自人类.
中国人和英国人都拥有自己独特的打招呼的方法,因而重新的写了方法的实现,叫做方法的重写;
*/
#import <Foundation/Foundation.h>
//创建人类
//声明
@interface YYPerson : NSObject
{
NSString *_name;
NSString *_nationality;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setNationality:(NSString *)nationality;
- (NSString *)nationality;
- (void)sayHi;
@end
//实现
@implementation YYPerson
- (void)setName:(NSString *)name;
{
_name = name;
}
- (NSString *)name
{
return _name;
}
- (void)setNationality:(NSString *)nationality
{
_nationality = nationality;
}
- (NSString *)nationality
{
return _nationality;
}
- (void)sayHi
{
NSLog(@"姓名:%@ 国籍:%@", _name, _nationality);
}
@end
//创建中国人类:继承自人类,并重写了人类的sayHi方法,因为中国人有自己独特的打招呼的方法;
//声明
@interface YYChinese : YYPerson
@end
//实现
@implementation YYChinese
- (void)sayHi
{
NSLog(@"幸会幸会,我是%@,来自%@!", _name, _nationality);
}
@end
//创建英国人类:继承自人类,并重写了人类的sayHi方法,因为英国人有自己独特的打招呼的方法;
//声明
@interface YYEnglish : YYPerson
@end
//实现
@implementation YYEnglish
- (void)sayHi
{
NSLog(@"Nice to meet you!,My name is %@,from %@!", _name, _nationality);
}
@end
int main(int argc, const char * argv[]) {
//创建中国人对象
YYChinese *chinese = [YYChinese new];
//赋值属性
[chinese setName:@"黄飞鸿"];
[chinese setNationality:@"中国"];
//创建英国人对象
YYEnglish *British = [YYEnglish new];
//赋值属性
[British setName:@"Eli"];
[British setNationality:@"England"];
//调用方法
[chinese sayHi];
[British sayHi];
return 0;
}