Java 多态

10 篇文章 0 订阅
  • 定义

    • 相同的行为,不同的实现

    • 一个对象有多种的形式的能力

  • 分类

    • 静态多态

      • 编译时系统决定调用

        • 使用重载实现

    • 动态多态

      • 运行时实现

        • 使用动态绑定和重写实现

  • 动态多态技术

    • 向上转型技术

      • 定义:

        • 一个父类的引用变量可以指向不同的子类对象

        • 一个子对象可以被当做一个父类类型

   

       System.out.println("选择您想要创建的动物:\t\n1.狗\t\n2.猫\t\n3.八戒\t\n");       

          Scanner scanner = new Scanner(System.in);

          @SuppressWarnings("unused")

          Animal ani;

          String sc = scanner.next();       

          switch (sc) {

          case "1":

              ani = new Dog();

              break;

          case "2":

              ani = new Cat();

              break;

          case "3":

              ani = new Pig();

              break;

          default:

              ani = new Animal();

              break;

          }
  • instanceof关键字

  • 动态绑定技术

    • 运行时根据父类的引用变量所指的实际类型执行相应的方法

    

      if(ani instanceof Dog)

          {

              ((Dog) ani).eatBone();

          }else if(ani instanceof Cat )

          {

              ((Cat) ani).catchMouse();

          }else if (ani instanceof Pig) {

              ((Pig) ani).done();

          }

动态多态利用---动态参数(equals的重写)

   

    @Override

     /**

      * 重写equals方法

      */

     public boolean equals(Object equ) {

          // 先判断传入的对象和当前类的对象是否为同一个地址值

          // if(this == equ)

          // return true;

          if (equ == null)

              return false;

          overEqu equ1;

          // 如果类型匹配,转换当前传入的对象类型

          if (equ instanceof overEqu) {

              equ1 = (overEqu) equ;

              if (equ1.name.equals(this.name) && this.age == equ1.age && equ1.sex.equals(this.sex))

                   return true;

              else

                   return false;

          }

          return false;
  • 动态多态利用---异构集合

      

    /**

           * 异构集合

           * 不同子类对象通过向上转型放在一个父类对象数组当中

           * 一个动物集合可以是狗、猫、猪都被放在同一个数组当中

           */

          Animal arran[] = new Animal[20];

          arran[0] = new Dog();

          arran[1] = new Cat();

          arran[2] = new Pig();



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值