zoukankan      html  css  js  c++  java
  • Java 从入门到进阶之路(十五)

    在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态。

    在日常生活中,很多意思并不是我们想要的意思,如下:

    1、领导:“你这是什么意思?”

    小明:“没什么意思,意思意思。”

    领导:“你这就不够意思了。”

    小明:“小意思,小意思。”

    领导:“你这人真有意思。”

    小明:“其实也没有别的意思。”

    领导:“那我就不好意思了。”

    小明:“是我不好意思。”

    2、电视剧《快把我哥带走》

    妹:“你根本就不懂我。”

    哥:“你不说我怎么懂你啊,”

    妹:“真的懂不需要说出来,”

    哥:“你说了我不就懂了吗?”

    妹:“说出来有什么意思啊,我不说你也应该懂。”

    哥:“我又不是算命的,我知道你几个意思啊,”

    妹:“我没什么意思,”

    哥:“确实没什么意思。”

    妹:“现在我说话你觉得没意思了吗?”

    哥:“是我说没意思?”

    妹:“那我说没意思,就是没意思嘛?”

    哥:“那你倒是告诉我你到底几个意思啊。”

    。。。

    对于不同的职业,当我们听到不同的词时也会想到不同的意思,比如 cut,对于医生来说就是动刀做手术,对于裁缝来说就是裁剪衣服,对于演员来说就是暂停表演,这就是多态作为行为的一种表现,还有当我们听到水这个对象时,作为业态可以洗脸,作为固态可以降温,作为气态可以蒸馒头,这就是多态作为对象的一种表现。

     多态:

    1、意义

      1)同一类型的引用指向不同的对象时,有不同的行为 ----- 行为的多态。

      2)同一对象被造型为不同的类型时,有不同的表现 ----- 对象的多态。

     2、向上造型:

      2.1)父类型的引用指向子类的对象

      2.2)能造型成的类型有:父类型、实现的接口。

      2.3)能点出来什么,看引用的类型

     3、强制类型转换,成功的条件有两个:

      3.1)引用所指向的对象,就是该类型

      3.2)引用所指向的对象,实现了改接口

     4、通过 instanceof 来判断引用是否是某种类型,instanceof 返回 boolean 结果,强转成功的条件时它为 true 的条件。

     1 abstract class people {
     2     abstract void cut();
     3 }
     4 
     5 class doctor extends people {
     6     void cut() {
     7     } // 做手术
     8 }
     9 
    10 class actor extends people {
    11     void cut() {
    12     } // 停止表演
    13 }
    14 
    15 class barber extends people {
    16     void cut() {
    17     } // 理发
    18 }

     在上面的代码中,我们其实就是做了一个行为多态的代码,对于不同类型的人来说,cut() 方法具有不同的行为。

     1 interface yetai { // 液态接口
     2     void xilian();
     3 }
     4 
     5 interface gutai { // 固态接口
     6     void jiangwen();
     7 }
     8 
     9 interface qitai {
    10     void zhengmantou(); // 气态接口
    11 }
    12 
    13 class water implements yetai, gutai, qitai {
    14     public void xilian() {
    15     }
    16 
    17     public void jiangwen() {
    18     }
    19 
    20     public void zhengmantou() {
    21     }
    22 }

    在上面的代码中,我们创建了液态,气态,固态三个接口,并且每个接口都有各自的方法,然后我们通过各自的接口实例化 water,可以看出不同接口可以实现各自的 water 实例,但是并不能去访问另一个实例里的方法,这就是 同一对象被造型为不同的类型时,有不同的表现,但是如果我们非要调用其他接口里的方法呢,比如在上面的代码中我们非要让 yetai 的 water 具有 jiagwen 功能,当然在实际生活中确实有这样的功能,

     我们可以通过强制类型转换的方法来实现上面的问题。如下:

     1 public class HelloWorld {
     2     public static void main(String[] args) {
     3         yetai water = new water();
     4         gutai water1 = (gutai) water;
     5         water1.jiangwen();
     6     }
     7 }
     8 
     9 interface yetai { // 液态接口
    10     void xilian();
    11 }
    12 
    13 interface gutai { // 固态接口
    14     void jiangwen();
    15 }
    16 
    17 interface qitai {
    18     void zhengmantou(); // 气态接口
    19 }
    20 
    21 interface qitai1 {
    22     void zhengmantou(); // 气态接口
    23 }
    24 
    25 class water implements yetai, gutai, qitai {
    26     public void xilian() {
    27     }
    28 
    29     public void jiangwen() {
    30     }
    31 
    32     public void zhengmantou() {
    33     }
    34 }

    我们通过 gutai water1 = (gutai) water;  将 yetai water 强转为 gutai water ,这样就可以实现 jiangwen 功能了。

  • 相关阅读:
    《人工智能的下一个挑战 —— 可解释性和可诠释性?》
    《python源码剖析-字节码和虚拟机》
    PP生产订单成本的计划、控制和结算
    存货核算当期单价(调整当期存货单价)
    财务审计核算单价
    成本核算过程
    WMS与MES集成
    月初一次冲回与单到冲回的理解
    财务结算的目的和一般流程
    ERP启动会
  • 原文地址:https://www.cnblogs.com/weijiutao/p/11847231.html
Copyright © 2011-2022 走看看