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

歡迎訪問 生活随笔!

生活随笔

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

java

Java中多态(向上转型)机制

發布時間:2024/9/30 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中多态(向上转型)机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么向上轉型?

所謂多態,也即向上轉型,就是某個對象的引用視為對其基類的引用,編譯對象是基類,運行對象是父類。向上轉型的對象由于Java后期綁定的特點,若父類重寫了基類中的方法,則它調用的是父類中的方法,其余調用的是基類中的方法。通過多態,我們可以減少代碼的冗余,當多個類繼承某個基類時,我們希望引用對象調用他們自身的方法,這時只需要寫出一條基類的對象引用即可。

2.代碼實現

class A{void a(){System.out.println("A:a()");b();};void b(){System.out.println("A:b()");} } public class Oos extends A{void b(){System.out.println("B:b()");}public static void main(String args[]){A test=new Oos();test.a();} }

這個例子中,test即為向上轉型的對象,它調用a()方法時,因為子類中沒有a()方法,所以調用的是父類的a()方法,在父類a()方法中,又調用了本身的b()方法,而它在子類Oos中有重寫過,因此調用的是子類中的b()方法。輸出如下所示:

?

3.缺陷

(1)只有非private方法才能覆蓋,因為private默認為final類型,當父類中的方法為private時,子類中的非private同名方法視為全新的方法,后期不會綁定它父類中的方法。代碼如下;

class A{void a(){System.out.println("A:a()");b();}private void b(){System.out.println("A:b()");} }public class Oos extends A{public void b(){System.out.println("B:b()");}public static void main(String args[]){A test=new Oos();test.a();} }

結果為:

(2)對于基類和父類的數據成員,向上轉型對象不會覆蓋數據成員,代碼如下:

class A{int i=0;void a(){System.out.println("A:a() i="+i);b();};void b(){System.out.println("A:b()");} }public class Oos extends A{int i=1;void b(){System.out.println("B:b() i="+i);}public static void main(String args[]){A test=new Oos();test.a();} }

結果為:

可以看到B中覆蓋的方法中i的值還是自己類中的值,不會覆蓋數據成員。

(3)靜態方法方法不具有多態性,因為靜態方法在編譯前就已被初始化,不具有后期綁定的特點。代碼省略。

總結

以上是生活随笔為你收集整理的Java中多态(向上转型)机制的全部內容,希望文章能夠幫你解決所遇到的問題。

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