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;

    }

  • 相关阅读:
    java 求两个数最大值
    java 加法运算
    javs switch 语句
    git合并分支成功,但是push失败(remote: GitLab: You are not allowed to push code to protected branches on this project.)
    python 获取日期以及时间
    1713
    linux shell脚本中的延时
    java 类的继承
    Python3 使用企业微信 API 发送消息
    java if 条件语句
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118651.html
Copyright © 2011-2022 走看看