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 功能了。

  • 相关阅读:
    request.getParameter() 、 request.getInputStream()和request.getReader() 使用体会
    HTTP之Content-Length
    关于spring3中No Session found for current thread!and Transaction的配置和管理(转)
    Java数据类型和MySql数据类型对应一览
    Spring MVC 解读——View,ViewResolver(转)
    LeetCode 441. Arranging Coins
    LeetCode 415. Add Strings
    LeetCode 400. Nth Digit
    LeetCode 367. Valid Perfect Square
    LeetCode 326. Power of Three
  • 原文地址:https://www.cnblogs.com/weijiutao/p/11847231.html
Copyright © 2011-2022 走看看