A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

Person.h
  1. #import <Foundation/Foundation.h>

  2. @interface Person : NSObject
  3. {
  4.     int _age;
  5. }
  6. - (void)setAge:(int)age;
  7. - (int)age;

  8. @end
复制代码
Person.m
  1. #import "Person.h"

  2. @implementation Person

  3. - (void)setAge:(int)age
  4. {
  5.     if(age > 0)
  6.     {
  7.         _age = age;
  8.     }
  9. }

  10. - (int)age
  11. {
  12.     return _age;
  13. }

  14. @end
复制代码

Student.h
  1. #import "Person.h"

  2. @interface Student : Person
  3. {
  4.     int _number; //学号
  5. }
  6. - (void)setNumber:(int)number;
  7. - (int)number;
  8. @end
复制代码

Student.m
  1. #import "Student.h"

  2. @implementation Student
  3. - (void)setNumber:(int)number
  4. {
  5.     _number = number;
  6. }

  7. - (int)number
  8. {
  9.     return _number;
  10. }
  11. @end
复制代码

Driver.h
  1. #import "Person.h"

  2. @interface Driver : Person
  3. {
  4.     int _driveExperience; //驾龄年数
  5. }
  6. - (void)setDriveExperience:(int)driveExperience;
  7. - (int)driveExperience;
  8. @end
复制代码

Driver.m
  1. #import "Driver.h"

  2. @implementation Driver
  3. - (void)setDriveExperience:(int)driveExperience
  4. {
  5.     if(driveExperience >= 0)
  6.     {
  7.         _driveExperience = driveExperience;
  8.     }
  9. }

  10. - (int)driveExperience
  11. {
  12.     return _driveExperience;
  13. }
  14. @end
复制代码

main.m
  1. /*
  2. 多态:父类指针指向子类对象

  3. 好处:
  4. * 可以用父类指针作为参数,代替所有具有某种共同属性的子类,不用为每个子类实现特有方法
  5. */

  6. #import <Foundation/Foundation.h>
  7. #import "Person.h"
  8. #import "Student.h"
  9. #import "Driver.h"

  10. void printAge(Person *person) //将参数定为父类指针Person *便可同时接收Person、Student、Driver等拥有_age属性的对象。
  11. {
  12.     NSLog(@"_age = %d" , [person age]);
  13. }

  14. int main(int argc, const char * argv[])
  15. {
  16.     Person *p = [Person new];
  17.     [p setAge:15];
  18.    
  19.     Student *s = [Student new];
  20.     [s setAge:18];
  21.     [s setNumber:3232];
  22.    
  23.     Driver *d = [Driver new];
  24.     [d setAge:45];
  25.     [d setDriveExperience:22];
  26.    
  27.     printAge(p); //传入一个Person类型的参数p
  28.     printAge(s); //传入一个Student类型的参数s
  29.     printAge(d); //传入一个Driver类型的参数d
  30.    
  31.    
  32.     return 0;
  33. }
复制代码




您需要登录后才可以回帖 登录 | 加入黑马