日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java学习之多态

發布時間:2025/6/15 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习之多态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多態的概念

  多態==晚綁定

  不要把函數重載理解為多態。

  因為多態是一種運行期的行為,不是編譯期的行為。

  多態:父類型的引用可以指向子類型的對象。

  比如 Parent p = new Child();

    當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;

    如果有,再去調用子類的該同名方法

  (注意此處,靜態static方法屬于特殊情況,靜態方法只能繼承,不能重寫Override,如果子類中定義了同名同形式的靜態方法,它對父類方法只起到隱藏的作用。調用的時候用誰的引用,則調用誰的版本。)

  (參考學習鏈接:http://docs.oracle.com/javase/tutorial/java/IandI/override.html)  

  如果想要調用子類中有而父類中沒有的方法,需要進行強制類型轉換,如上面的例子中,將p轉換為子類Child類型的引用。

  因為當用父類的引用指向子類的對象,用父類引用調用方法時,找不到父類中不存在的方法。這時候需要進行向下的類型轉換,將父類引用轉換為子類引用。?????

?

結合實例說明???????????????

  下面舉個例子(有問題的代碼已注釋):

  主要講講兩種類型轉換和兩種編譯時候的錯誤。  

public class PolyTest {public static void main(String[] args){//向上類型轉換Cat cat = new Cat();Animal animal = cat;animal.sing();//向下類型轉換Animal a = new Cat();Cat c = (Cat)a;c.sing();c.eat();//編譯錯誤//用父類引用調用父類不存在的方法//Animal a1 = new Cat();//a1.eat();//編譯錯誤//向下類型轉換時只能轉向指向的對象類型 //Animal a2 = new Cat();//Cat c2 = (Dog)a2; } } class Animal {public void sing(){System.out.println("Animal is singing!");} } class Dog extends Animal {public void sing(){System.out.println("Dog is singing!");} } class Cat extends Animal {public void sing(){System.out.println("Cat is singing!");}public void eat(){System.out.println("Cat is eating!");} }

  

  例子的執行結果:

  

  這段代碼:  

?

  Cat類中定義了eat()方法,但是Animal類中沒有這個方法,a1引用是Animal類的,所以找不到,編譯時出錯:

  

?

兩種類型的類型轉換

  (1)向上類型轉換(Upcast):將子類型轉換為父類型。

  對于向上的類型轉換,不需要顯示指定,即不需要加上前面的小括號和父類類型名。

  

?

  (2)向下類型轉換(Downcast):將父類型轉換為子類型。

  對于向下的類型轉換,必須要顯式指定,即必須要使用強制類型轉換

  

?

  并且父類型的引用必須指向子類的對象,即指向誰才能轉換成誰。

  不然也會編譯出錯:

?

?

  因為父類引用指向的是Cat類的對象,而要強制轉換成Dog類,這是不可能的。

?

總結

以上是生活随笔為你收集整理的Java学习之多态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。