在以前的文章咱們介紹了一下 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 功能了。