• Polymorphism


      多态定义(百度百科):多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述

    ——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术

    内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function) 实现的。

      用我今天学到的方法来说,多态(Polymorphism)就是父类型的引用可以指向子对象。(“子类就是父类”) 

    interface Animal {
      void shout(); // 定义抽象shout()方法
    }
    // 定义Cat类实现Animal接口
    class Cat implements Animal {
    // 实现shout()方法
      public void shout() {
        System.out.println("喵喵……");
      }
    }
    // 定义Dog类实现Animal接口
    class Dog implements Animal {
    // 实现shout()方法
    public void shout() {
      System.out.println("汪汪……");
      }
    }
    // 定义测试类
    public class Example13 {
      public static void main(String[] args) {
        Animal an1 = new Cat(); // 创建Cat对象,使用Animal类型的变量an1引用
        Animal an2 = new Dog(); // 创建Dog对象,使用Animal类型的变量an2引用
        animalShout(an1); // 调用animalShout()方法,将an1作为参数传入
        animalShout(an2); // 调用animalShout()方法,将an2作为参数传入
    }
    // 定义静态的animalShout()方法,接收一个Animal类型的参数
    public static void animalShout(Animal an) {
      an.shout(); // 调用实际参数的shout()方法
      }
    }

     

    1. 多态:父类型的引用可以指向子对象。

    2. Parent p = new Child();当使用多态方式调法时,首先检查父类中是否有 sing() sing() sing()方法, 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 如果没有则编译错误;,再去调用子类的 sing()方法。

    3.向上类型转换( 向上类型转换( upcastupcastupcastupcast upcast):比如说将 ):比如说将 Cat Cat类型转换为 Animal Animal 类型 ,即将子转换为父类型。

    4.向下类型转换( downcastdowncastdowncastdowncastdowncastdowncast downcast):比如将 Animal Animal 类型转换为 类型转换为 Cat Cat类型 。即将父转换为子类型。对于向下,必须要显式指定 转换为子类型。对于向下,必须要显式指定 转换为子类型。对于向下,必须要显式指定 (必须要使用强制类型 )

     1 package polymorphism;
     2 
     3 public abstract class Person {
     4     public abstract void say();
     5 }
     6 
     7 package polymorphism;
     8 
     9 public class Chinese extends Person {
    10 
    11     @Override
    12     public void say() {
    13         System.out.println("Chinese say chinses");
    14     }
    15 
    16 }
    17 
    18 package polymorphism;
    19 
    20 public class American extends Person {
    21 
    22     @Override
    23     public void say() {
    24         System.out.println("American say English");
    25     }
    26 
    27 }
    28 
    29 package polymorphism;
    30 
    31 public class Polymorphism {
    32     static void doaction(Person person)
    33     {    
    34         person.say();
    35     }
    36     
    37     public static void main(String[] args) {
    38         Person chinese=new Chinese();
    39         Person american=new American();
    40         doaction(chinese);
    41         doaction(american);
    42     }
    43 }
  • 相关阅读:
    pidgin的未认证解决办法
    题解【洛谷P1074】[NOIP2009]靶形数独
    题解【洛谷P1315】[NOIP2011]观光公交
    题解【BZOJ4145】「AMPPZ2014」The Prices
    题解【洛谷P4588】[TJOI2018]数学计算
    题解【洛谷P3884】[JLOI2009]二叉树问题
    题解【SP8002】HORRIBLE
    树链剖分学习笔记
    题解【洛谷P1807】最长路_NOI导刊2010提高(07)
    题解【洛谷P1995】口袋的天空
  • 原文地址:https://www.cnblogs.com/daneres/p/4420964.html
Copyright © 2020-2023  润新知