Java 從入門到進階之路(十五)

在以前的文章咱們介紹了一下 Java 中的接口,本章咱們來看一下 Java 中類的多態。spa

在平常生活中,不少意思並非咱們想要的意思,以下:code

一、領導:「你這是什麼意思?」對象

小明:「沒什麼意思,意思意思。」blog

領導:「你這就不夠意思了。」接口

小明:「小意思,小意思。」it

領導:「你這人真有意思。」class

小明:「其實也沒有別的意思。」引用

領導:「那我就很差意思了。」方法

小明:「是我很差意思。」im

二、電視劇《快把我哥帶走》

妹:「你根本就不懂我。」

哥:「你不說我怎麼懂你啊,」

妹:「真的懂不須要說出來,」

哥:「你說了我不就懂了嗎?」

妹:「說出來有什麼意思啊,我不說你也應該懂。」

哥:「我又不是算命的,我知道你幾個意思啊,」

妹:「我沒什麼意思,」

哥:「確實沒什麼意思。」

妹:「如今我說話你以爲沒意思了嗎?」

哥:「是我說沒意思?」

妹:「那我說沒意思,就是沒意思嘛?」

哥:「那你卻是告訴我你到底幾個意思啊。」

。。。

 

對於不一樣的職業,當咱們聽到不一樣的詞時也會想到不一樣的意思,好比 cut,對於醫生來講就是動刀作手術,對於裁縫來講就是裁剪衣服,對於演員來講就是暫停表演,這就是多態做爲行爲的一種表現,還有當咱們聽到水這個對象時,做爲業態能夠洗臉,做爲固態能夠降溫,做爲氣態能夠蒸饅頭,這就是多態做爲對象的一種表現。

 多態:

一、意義

  1)同一類型的引用指向不一樣的對象時,有不一樣的行爲 ----- 行爲的多態。

  2)同一對象被造型爲不一樣的類型時,有不一樣的表現 ----- 對象的多態。

 二、向上造型:

  2.1)父類型的引用指向子類的對象

  2.2)能造型成的類型有:父類型、實現的接口。

  2.3)能點出來什麼,看引用的類型

 三、強制類型轉換,成功的條件有兩個:

  3.1)引用所指向的對象,就是該類型

  3.2)引用所指向的對象,實現了改接口

 四、經過 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 功能了。

相關文章
相關標籤/搜索