zoukankan      html  css  js  c++  java
  • java.多态

    概述

    多态是继封装、继承之后,面向对象的第三大特性
    生活中,比如跑的动作,猫、狗和大象,跑起来是不一样的。再比如飞行的动作,昆虫、鸟和飞机,飞起来也是不一样的。可见,同一类行为,通过不同的事物,可以体现出来不同的形态。多态描述的就是这样的状态。
    

    定义

    多态:是指同一行为,具有多个不同表现形式
        1、继承或实现【二选一】
        2、方法重写【意义体现:不重写,无意义】
        3、弗雷引用指向子类对象【格式体现】
    

    多态的体现

    多态体现的格式:

    父类类型 变量名 = new 子类对象;
    变量名.方法名();
    //父类类型:指子类对象继承的父类类型,或者实现的父接口类型
    

    代码如下:

    Fu f = new Zi();
    f.method();
    

    当使用多态方法调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法
    代码:

    多态的好处

    实际开发中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现多态的扩展性与便利。代码如下:
    

    由于多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,当然可以把Cat对象和Dog对象,传递给方法。
    当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果自然与showCatEat,showDogEat方法一致,所以showAnimalEat完全可以代替以上两方法
    不仅仅是代替,在扩展性方面,无论之后再多的子类出现,我们都不需要编写showXxxEat方法,直接使用showAnimalEat都可以完成
    所以,多态的好处,体现在可以使编程跟更简单,并有良好的扩展

    引用类型转换

    多态的转型分为向上转型和向下转型两种
    

    向上转型

    多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的
    当父类引用指向一个子类对象时,便是向上转型
    使用格式:
    父类类型 变量名 = new 子类类型();
    Animal a = new Cat();
    
    

    向下转型

    父类类型向子类类型向下转型的过程,这个过程是强制的
    一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型
    使用格式:
    子类类型 变量名 = (子类类型)父类变量名;
    Cat c = (Cat) a;
    

    为什么要转型?

    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有而父类没有的方法。所以想要调用子类特有的方法,必须做向下转型。
    

    转型的异常

    转型的过程中,一不小心就会遇到这样的问题,请看如下代码:
    

    这段代码可以通过编译,但是运行时,却报出了 ClassCastException ,类型转换异常!这是因为,明明创建了
    Cat类型对象,运行时,当然不能转换成Dog对象的。这两个类型并没有任何继承关系,不符合类型转换的定义。
    为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格式如下:

    变量名 instanceof 数据类型
    如果变量属于该数据类型,返回true。
    如果变量不属于该数据类型,返回false。
    

    所以,转换前,我们最好先做一个判断,代码如下:

  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/youngleesin/p/11925301.html
Copyright © 2011-2022 走看看