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

  • 相关阅读:
    ReSharper.8.0.14.856注册码
    asp.net 301重定向代码
    WebResource.axd 404 错误
    【原创】asp.net导出word 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a
    C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
    Repository 设计模式介绍
    将15位身份证转换成18位
    清理数据库木马文件
    Oracle的创建表空间及用户
    使用python脚本执行地理处理工具
  • 原文地址:https://www.cnblogs.com/KiloNet/p/1595486.html
Copyright © 2011-2022 走看看