zoukankan      html  css  js  c++  java
  • 面向对象之多态性

          今天在给同事培训时讲到“面对对象”这一章,讲完后发现有些东西没有解释的很清楚,特别是“多态性”,就是泛泛的谈了一下而掠过。故写此博文以补述。

          多态性(Polymorphism):可以用该变量引用不同类型的对象,并且自动调用与它所引用的对象类型相对应的特定方法(注:摘自《java2编程指南》)。

          一.继承与多态性  
        满足多态性的条件如下:

    1. 对派生类对象的方法调用必须通过积累的变量进行。
    2. 被调用的方法必须是基类的成员
    3. 方法的签名特征在基类和派生类中必须相同
    4. 方法返回值的类型在基类和派生中必须相同
    5. 方法访问说明符所受的限制在派生类中必须不比在基类中更多。

          比如,动物基类Animal animal;
          它可以用基类声明,然后用派生类实例化:
          Animal animal = new Dog("小白");

         实例化后的 animal 可以访问基类Animal中的任何方法。

         比如:人-->中国人-->湖南人-->在深圳的湖南人。
         人 我 = new 在深圳的湖南人("KiloNet");
         那么“我”就拥有了湖南人和中国人特征,可以随时表现出来,出国了“我”就是“中国人”,在深圳,我就是“湖南人”。


         二.接口与多态性:
         接口可以实现多重继承,在Java中,接口是implement,类是extend。这样理解起来就非常容易了。我们只能继承一个类,也就是单一继承。但我们可以实现多个接口,也就是.Net中讲到的多重继承。

          interface 单身{
                 void 上网泡妹妹;
                 void 下班一个人吃饭;
          }

          interface 恋爱{
                  void 压马路;
                  void 亲吻;
          }

          再以“我”举例,没有女友时,我实现“单身”的接口,“单身”的任何方法我都可以调用。

         class 我 extend 在深圳的湖南人 implement 单身{
             /**可以做单身的任何事情*/
          }


         当有了女友时,就得修改为:
         class 我 extend 在深圳的湖南人 implement 恋爱{
             /**可以做恋爱中的任何事情*/
          }

          如果你比较花心,一面谈着女友,一面在网上泡妹妹,那么你应该是这样子的:
            class 花心人 extend 人 implement 单身,恋爱{
             /**可以做单身的任何事情*/
             /**可以做恋爱中的任何事情*/ 
          }

         所以,你这个花心人就成了多态性,你既可以继续泡妹妹,又可以和女朋友“亲吻”。真是人生快事。不过千万别越界,所以,“女友”调用这个“花心人”时,只能“压马路”,“亲吻”,如果让你女友调用到“网上泡妹妹”,那么你就完蛋了。嘿嘿!

            这就是面向对象的三大特性之一的“多态性”。所以,做人还是单一的比较好,否则很容易奔溃!


    id 博主 = [[KILONET.CNBLOGS.COM alloc] initWithValue:@"天堂向右,我依然向左"

                  网名:@"老舟"

                  兴趣:@"影音,阅读"

                  动态:@"系统架构设计,Android通信模块开发"

                  网址:@"http://kilonet.cnblogs.com"
                  签名:@"--------------------------------------------------

                                  Stay Hungry , Stay Foolish

                                  求  知  若  渴,处  事  若  愚

                              --------------------------------------------------"

                  ];         // Never Release

  • 相关阅读:
    spark streaming 概述
    spark sql 的性能调优
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)
    LeetCode 90. Subsets II (子集合之二)
    LeetCode 88. Merge Sorted Array(合并有序数组)
    LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
    LeetCode 80. Remove Duplicates from Sorted Array II (从有序序列里移除重复项之二)
    LeetCode 79. Word Search(单词搜索)
    LeetCode 78. Subsets(子集合)
  • 原文地址:https://www.cnblogs.com/KiloNet/p/1595486.html
Copyright © 2011-2022 走看看