黑马程序员技术交流社区
标题:
talk is cheap, show me the code!--面向对象三大特性之——多态
[打印本页]
作者:
崔石炫
时间:
2014-10-22 00:18
标题:
talk is cheap, show me the code!--面向对象三大特性之——多态
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
@end
复制代码
Person.m
#import "Person.h"
@implementation Person
- (void)setAge:(int)age
{
if(age > 0)
{
_age = age;
}
}
- (int)age
{
return _age;
}
@end
复制代码
Student.h
#import "Person.h"
@interface Student : Person
{
int _number; //学号
}
- (void)setNumber:(int)number;
- (int)number;
@end
复制代码
Student.m
#import "Student.h"
@implementation Student
- (void)setNumber:(int)number
{
_number = number;
}
- (int)number
{
return _number;
}
@end
复制代码
Driver.h
#import "Person.h"
@interface Driver : Person
{
int _driveExperience; //驾龄年数
}
- (void)setDriveExperience:(int)driveExperience;
- (int)driveExperience;
@end
复制代码
Driver.m
#import "Driver.h"
@implementation Driver
- (void)setDriveExperience:(int)driveExperience
{
if(driveExperience >= 0)
{
_driveExperience = driveExperience;
}
}
- (int)driveExperience
{
return _driveExperience;
}
@end
复制代码
main.m
/*
多态:父类指针指向子类对象
好处:
* 可以用父类指针作为参数,代替所有具有某种共同属性的子类,不用为每个子类实现特有方法
*/
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
#import "Driver.h"
void printAge(Person *person) //将参数定为父类指针Person *便可同时接收Person、Student、Driver等拥有_age属性的对象。
{
NSLog(@"_age = %d" , [person age]);
}
int main(int argc, const char * argv[])
{
Person *p = [Person new];
[p setAge:15];
Student *s = [Student new];
[s setAge:18];
[s setNumber:3232];
Driver *d = [Driver new];
[d setAge:45];
[d setDriveExperience:22];
printAge(p); //传入一个Person类型的参数p
printAge(s); //传入一个Student类型的参数s
printAge(d); //传入一个Driver类型的参数d
return 0;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2