zoukankan      html  css  js  c++  java
  • 09-多态

    三大特性最后一个:多态(多种形态)

    1、多态的基本使用

          要想有多态,必须先有继承。没有继承就没有多态。

      多态:父类指针指向子类对象。

          创建两个类:Student类 和 Person类 ,并且Student类 继承 Person类 

     1 /*
     2  创建两个类:Student类 和 Person类 ,并且Student类 继承 Person类
     3 */
     4 #import <Foundation/Foundation.h>
     5 
     6 //Person类
     7 @interface Person : NSObject
     8 - (void)run;
     9 @end
    10 
    11 @implementation Person
    12 - (void)run
    13 {
    14     NSLog(@"Person----跑");
    15 }
    16 @end
    17 
    18 @interface Student : Person
    19 - (void)run;
    20 @end
    21 //Student类
    22 @implementation Student
    23 //重写run方法
    24 - (void)run
    25 {
    26     NSLog(@"Student----跑");
    27 }
    28 @end
    29 int main(int argc, const char * argv[])
    30 {
    31     //多种形态
    32     //Student *stu = [Student new]; //对象是Student类型(形态1)
    33     //父类指针指向子类对象,就是多态
    34     Person *p = [Student new];//对象是Person类型(形态2)
    35     //调用方法时会检测对象的真实形态
    36     [p run];
    37     return 0;
    38 }

    (1)第34行,表示将Student类的对象地址给了,Perosn类型的指针变量。这时,父类指针指向了子类对象,便是多态。

    (2)调用方法的时候,会自动检测对象的真实形态,这里对象的真实形态为Student类型,于是就调用Student类中的run方法,而不是Person类中的run方法。

    输出结果是: Student----

    2、多态使用的注意点

      Student *stu = [Person new];  Person 不是 Student

         Nsstring *s = [Cat new];  Cat 不是 NSString(字符串)

       Cat *c = [Animal new];  Animal 不是 Cat

    上面的几种写法,都不符合逻辑,但是由于OC的弱语法,编译器不会报错,只是一个警告。

    但是不推荐这么写,这么写造成代码可读性差,逻辑混乱。

    3、使用多态的好处

         如果函数的参数是父类指针,那么子类对象都可以传递给函数的参数。

      

    人生之路,不忘初心,勿忘始终!
  • 相关阅读:
    一款炫酷Loading动画--载入失败
    ITK Configuring and Building in VisualStudio及hello world程序编译
    InnoDB: Error: log file .ib_logfile0 is of different size 0 10485760 bytes
    vim学习笔记(1)——vim操作
    Android数据格式解析对象JSON用法
    JSONObject与JSONArray的使用
    AsyncHttpClient来完成网页源代码的显示功能,json数据在服务器端的读取还有安卓上的读取
    android开源框架android-async-http使用
    开源框架AsyncHttpClient使用
    Android:Layout_weight的深刻理解
  • 原文地址:https://www.cnblogs.com/xdl745464047/p/4000396.html
Copyright © 2011-2022 走看看