zoukankan      html  css  js  c++  java
  • 为什么使用多态?实现多态的有哪些方式

    实现多态的两种方式
      一、什么是多态?

            父类类型的变量指向子类创建的对象,使用该变量调用父类中一个被子类重写的方法,则父类中的方法呈现出不同的行为特征,这就是多态。

            简单的来说编译时方法行为表现的是父类中的方法,运行时方法行为表现的是子类中重写该方法的行为特征

    二、为什么使用多态?

           1、实现代码的复用,避免代码的冗余;

           2、减少代码之间的关联性,即耦合度,方便后期对代码的修改,功能的改善,不必牵一发而动全身,减少不必要的麻烦;

           3、能够通过重写子类的方法,使不同的对像具有不同的功能,扩展了功能。

           3、举例说明

    //哺乳类
    piublic class Mammal
    public void move(){
    System.out.println("会移动!");
    }
    }

    //鲸鱼类
    public class Whale extends Mammal{
    public void move() {
    System.out.println("靠鱼鳍移动!");
    }
    }

    //蝙蝠类
    public class Bat extends Mammal{
    public void move() {
    System.out.println("靠翼移动!");
    }
    }

    //如果有很多个哺乳类动物的话,每一次都要重新定义一个move方法,很麻烦且代码冗余影响运行的速度

    public class Main{

    public static void main(String[] args) {
    Whale whale = new Whale();
    whale.move();

    Bat bat = new Bat();
    bat.move();

    }

    }

    //我们可以这样修改

    public class Main{

    public static void main(String[] args) {

    Mammal mammal1 = new Whale();//使用上转型每次只需要重写子类的方法就可以,不需要重新定义方法
    Mammal mammal2 = new Bat();
    mammal1.move();
    mammal2.move();

    }
    }
     

      三、多态的实现方式

              1、上转型对象实现多态

                  1.1、上转型对象与下转型对象 

                          上转型对象:子类创建的对象赋值给父类声明变量,则该对象称为上转型对象,这个过程称为对象上转型,对应于                 数据类型转换中的自动类型转换;

                          下转型对象:上转型对象再强制转换为创建该对象的子类类型的对象,即将上转型对象还原为子类对象,对应于数                  据类型转换中的强制类型转换。

                           注意:①上转型对象才能够对象下转型;

    public class Test {
    public static void main(String[] args) {
    Mammal mammal = new Whale();//下转型对象
    Whale whale =(Whale) mammal;//下转型对象,还原为鲸鱼类
    }
    }
                                      ②上转型对象不能操作子类新增的成员变量,不能调用子类新增的方法,因此如果要使用子类新增的属性                                         必须下转型

                  1.2、上转型对象实现多态实例

    //哺乳类(父类)
    public class Mammal{
    public void move(){
    System.out.println("移动");
    }
    }
    //鲸鱼类(继承自哺乳类)
    public class Whale extends Mammal{
    public void move(){
    System.out.println("靠鱼鳍移动");
    }
    }
    //测试类
    public class Test {
    public static void main(String[] args) {
    Mammal mammal = new Whale();//上转型对象,父类类型的变量指向子类声明的对象
    mammal.move();
    }
    }
     

      运行结果:运行结果表现出来的是Mammal里move方法的行为特征,编译时表现为父类的move方法的行为特征 ,多种行为状态,即为                        多态

         2、接口回调实现多态                      

                     2.1、什么是接口回调? 

                          接口回调描述的是一种现象:接口声明的变量指向其实现类实例化的对象,那么该接口变量就可以调用接口中的抽象方法,

                     编译时方法行为表现的是接口中的抽象方法,运行时方法行为表现的是接口实现类中重写该方法的行为特征,即为多态

                     2.2、接口回调实现多态实例

    //接口
    public interface IMammal {
    void move();
    }
    public class Whale implements IMammal{
    public void move(){
    System.out.println("靠鱼鳍移动");
    }
    }
    public class Test {
    public static void main(String[] args) {
    IMammal mammal = new Whale();
    mammal.move();
    }
    }
      运行结果:编译时是接口的行为特征,运行时是接口实现类的行为特征

    3、接口回调与上转型对象实现多态的区别与联系

        ①上转型对象多态的父类是普通类,接口回调都是父类是接口;

        ②接口回调父类方法更加的简洁,是抽象方法不需要有方法体;

        ③都是编译时显示父类方法行为特征,运行时显示子类行为特征。
    --------------------- 

  • 相关阅读:
    Python全栈开发之路 【第十八篇】:Ajax技术
    Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例
    Python全栈开发之路 【第十六篇】:jQuey的动画效果、属性操作、文档操作、input的value
    Burp Suite安装&环境配置&启动&浏览器设置代理
    git个人使用总结
    Windows下创建.gitgnore文件
    git个人使用总结(界面版)
    测试左移之代码评审
    Java自动内存管理机制
    【海盗派测试分析MFQ&PPDCS】读书笔记
  • 原文地址:https://www.cnblogs.com/ly570/p/10961098.html
Copyright © 2011-2022 走看看