zoukankan      html  css  js  c++  java
  • 多态(二十八)

    多态

    面向对象的三大特征之一。

    多态的核心,是“父类指针指向子类对象”。体现多态的特点,是把父类指针作为参数,或者返回值的时候比较明显。

    详细来说,就是我把父类指针作为参数,当传参数的时候,可以把这个父类下的任意子类当作参数传进来。或者我把父类指针当作返回值类型的时候,可以return这个父类下的任意子类。

    也就是创建子类对象,然后将这个对象当作参数传出去或者返回值return。

    就是这样实现多态。

    Person.h

    #import <Foundation/Foundation.h>

    @interface Person : NSObject

     

    - (void)say;

     

    @end

    Person.m

    #import "Person.h"

     

    @implementation Person

    - (void)say{

        NSLog(@"我是一个人?、。");

    }

    @end

    Student.h

    #import "Person.h"

     

    @interface Student : Person

     

    - (void)study;

    @end

    Student.m

    #import "Student.h"

     

    @implementation Student

    - (void)study{

        NSLog(@"我再学习,口可口可...");

    }

    @end

    Teacher.h

    #import "Person.h"

     

    @interface Teacher : Person

     

    @end

    Teacher.m

    #import "Teacher.h"

     

    @implementation Teacher

     

    @end

    Play.h

    #import <Foundation/Foundation.h>

    @class Person;

    @interface Play : NSObject

     

    - (void)play:(Person *)aPerson;

     

    @end

    Play.m

    #import "Play.h"

    #import "Person.h"

    #import "Student.h"

    #import "Teacher.h"

    @implementation Play

    - (void)play:(Person *)aPerson{

       

        //获取类型

        [aPerson className];

        //要使用子类特性

        //要强制转换回来(转换类型)

        Teacher *t = aPerson;

       

        NSLog(@"%@",[aPerson className]);

    }

    @end

    main.m

    #import <Foundation/Foundation.h>

    #import "Person.h"

    #import "Student.h"

    #import "Teacher.h"

    #import "Play.h"

    int main(int argc, const char * argv[]) {

        @autoreleasepool {

           

            //多态

            //父类指针指向子类对象

            //一般用在参数 和 返回值

           

           

            //学生对象被父类指针指向

            Person *p1 = [[Student alloc]init];

           

    //        [p1 say];

           

            Student *s1 = [[Student alloc]init];

           

            Teacher *t1 = [[Teacher alloc]init];

           

           

            Play *play = [[Play alloc]init];

           

            [play play:t1];

    //        [p1 study];

           

        }

        return 0;

    }

  • 相关阅读:
    软件体系架构会议纪要
    漫谈架构之阅读笔记02
    漫谈架构之阅读笔记01
    学习进度报告01
    以《淘宝网》为例,描绘质量属性的六个常见属性场景。
    软件架构师的工作方式
    软件体系架构课堂测试02
    系统安全——访问控制
    信息安全技术——物理环境与设备安全、虚拟专用网
    信息安全技术——防火墙、入侵检测技术
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118651.html
Copyright © 2011-2022 走看看