黑马程序员技术交流社区

标题: talk is cheap, show me the code!--面向对象三大特性之——多态 [打印本页]

作者: 崔石炫    时间: 2014-10-22 00:18
标题: talk is cheap, show me the code!--面向对象三大特性之——多态
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. }
复制代码









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2