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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM