精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

詳細介紹Java多態性(二)

開發 后端
本文介紹的是JAVA的多態性,希望對你有幫助,一起來看。

多態性是通過:

1 接口和實現接口并覆蓋接口中同一方法的幾不同的類體現的

2 父類和繼承父類并覆蓋父類中同一方法的幾個不同子類實現的.

一、基本概念

多態性:發送消息給某個對象,讓該對象自行決定響應何種行為。通過將子類對象引用賦值給超類對象引用變量來實現動態方法調用。

java 的這種機制遵循一個原則:當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,但是這個被調用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法。

1. 如果a是類A的一個引用,那么,a可以指向類A的一個實例,或者說指向類A的一個子類。

2. 如果a是接口A的一個引用,那么,a必須指向實現了接口A的一個類的實例。

二、Java多態性實現機制
 

SUN目前的JVM實現機制,類實例的引用就是指向一個句柄(handle)的指針,這個句柄是一對指針:
一個指針指向一張表格,實際上這個表格也有兩個指針(一個指針指向一個包含了對象的方法表,另外一個指向類對象,表明該對象所屬的類型);

另一個指針指向一塊從java堆中為分配出來內存空間。

三、總結

1、通過將子類對象引用賦值給超類對象引用變量來實現動態方法調用。

  1. DerivedC c2=new DerivedC();  
  2. BaseClass a1= c2; //BaseClass 基類,DerivedC是繼承自BaseClass的子類  
  3. a1.play(); //play()在BaseClass,DerivedC中均有定義,即子類覆寫了該方法 

 

分析:

1、為什么子類的類型的對象實例可以覆給超類引用?

自動實現向上轉型。通過該語句,編譯器自動將子類實例向上移動,成為通用類型BaseClass;

2、a.play()將執行子類還是父類定義的方法?

子類的。在運行時期,將根據a這個對象引用實際的類型來獲取對應的方法。所以才有多態性。一個基類的對象引用,被賦予不同的子類對象引用,執行該方法時,將表現出不同的行為。

在a1=c2的時候,仍然是存在兩個句柄,a1和c2,但是a1和c2擁有同一塊數據內存塊和不同的函數表。

2、不能把父類對象引用賦給子類對象引用變量

 

  1. BaseClass a2=new BaseClass();  
  2. DerivedC c1=a2;//出錯 

 

在java里面,向上轉型是自動進行的,但是向下轉型卻不是,需要我們自己定義強制進行。

 

  1. c1=(DerivedC)a2; 進行強制轉化,也就是向下轉型. 

 

3、記住一個很簡單又很復雜的規則,一個類型引用只能引用引用類型自身含有的方法和變量。

你可能說這個規則不對的,因為父類引用指向子類對象的時候,***執行的是子類的方法的。
其實這并不矛盾,那是因為采用了后期綁定,動態運行的時候又根據型別去調用了子類的方法。而假若子類的這個方法在父類中并沒有定義,則會出錯。

例如,DerivedC類在繼承BaseClass中定義的函數外,還增加了幾個函數(例如 myFun())

分析:

當你使用父類引用指向子類的時候,其實jvm已經使用了編譯器產生的類型信息調整轉換了。

這里你可以這樣理解,相當于把不是父類中含有的函數從虛擬函數表中設置為不可見的。注意有可能虛擬函數表中有些函數地址由于在子類中已經被改寫了,所以對象虛擬函數表中虛擬函數項目地址已經被設置為子類中完成的方法體的地址了。

4、Java與C++多態性的比較

jvm關于多態性支持解決方法是和c++中幾乎一樣的,只是c++中編譯器很多是把類型信息和虛擬函數信息都放在一個虛擬函數表中,但是利用某種技術來區別。

Java把類型信息和函數信息分開放。Java中在繼承以后,子類會重新設置自己的虛擬函數表,這個虛擬函數表中的項目有由兩部分組成。從父類繼承的虛擬函數和子類自己的虛擬函數。

虛擬函數調用是經過虛擬函數表間接調用的,所以才得以實現多態的。Java的所有函數,除了被聲明為final的,都是用后期綁定。

四. 1個行為,不同的對象,他們具體體現出來的方式不一樣,

比如: 方法重載 overloading 以及 方法重寫(覆蓋)override

 

  1. class Human{  
  2. void run(){輸出 人在跑}  
  3. }  
  4. class Man extends Human{  
  5. void run(){輸出 男人在跑}  
  6. }  
  7. 這個時候,同是跑,不同的對象,不一樣(這個是方法覆蓋的例子)  
  8. class Test{  
  9. void out(String str){輸出 str}  
  10. void out(int i){輸出 i}  

 

這個例子是方法重載,方法名相同,參數表不同

ok,明白了這些還不夠,還用人在跑舉例

 

  1. Human ahuman=new Man(); 

 

這樣我等于實例化了一個Man的對象,并聲明了一個Human的引用,讓它去指向Man這個對象

意思是說,把 Man這個對象當 Human看了.

比如去動物園,你看見了一個動物,不知道它是什么, "這是什么動物? " "這是大熊貓! "

這2句話,就是***的證明,因為不知道它是大熊貓,但知道它的父類是動物,所以,這個大熊貓對象,你把它當成其父類 動物看,這樣子合情合理.這種方式下要注意 new Man();的確實例化了Man對象,所以 ahuman.run()這個方法 輸出的 是 "男人在跑 "如果在子類 Man下你 寫了一些它獨有的方法 比如 eat(),而Human沒有這個方法,在調用eat方法時,一定要注意 強制類型轉換 ((Man)ahuman).eat(),這樣才可以...

對接口來說,情況是類似的...

實例:

 

  1. package domatic;  
  2. //定義超類superA  
  3. class superA {  
  4. int i = 100;  
  5. void fun(int j) {  
  6. j = i;  
  7. System.out.println("This is superA");  
  8. }  
  9. }  
  10. // 定義superA的子類subB  
  11. class subB extends superA {  
  12. int m = 1;  
  13. void fun(int aa) {  
  14. System.out.println("This is subB");  
  15. }  
  16. }  
  17. // 定義superA的子類subC  
  18. class subC extends superA {  
  19. int n = 1;  
  20. void fun(int cc) {  
  21. System.out.println("This is subC");  
  22. }  
  23. }  
  24. class Test {   
  25. public static void main(String[] args) {  
  26. superA a = new superA();  
  27. subB b = new subB();  
  28. subC c = new subC();  
  29. a = b;  
  30. a.fun(100);  
  31. a = c;  
  32. a.fun(200);  
  33. }  
  34. }  
  35. /*  
  36. * 上述代碼中subB和subC是超類superA的子類,我們在類Test中聲明了3個引用變量a, b,  
  37. * c,通過將子類對象引用賦值給超類對象引用變量來實現動態方法調用。也許有人會問:  
  38. * "為什么(1)和(2)不輸出:This is superA"。  
  39. * java的這種機制遵循一個原則:當超類對象引用變量引用子類對象時,  
  40. * 被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,  
  41. * 但是這個被調用的方法必須是在超類中定義過的,  
  42. * 也就是說被子類覆蓋的方法。  
  43. * 所以,不要被上例中(1)和(2)所迷惑,雖然寫成a.fun(),但是由于(1)中的a被b賦值,  
  44. * 指向了子類subB的一個實例,因而(1)所調用的fun()實際上是子類subB的成員方法fun(),  
  45. * 它覆蓋了超類superA的成員方法fun();同樣(2)調用的是子類subC的成員方法fun()。  
  46. * 另外,如果子類繼承的超類是一個抽象類,雖然抽象類不能通過new操作符實例化,  
  47. * 但是可以創建抽象類的對象引用指向子類對象,以實現運行時多態性。具體的實現方法同上例。  
  48. * 不過,抽象類的子類必須覆蓋實現超類中的所有的抽象方法,  
  49. * 否則子類必須被abstract修飾符修飾,當然也就不能被實例化了  
  50. */ 

 

以上大多數是以子類覆蓋父類的方法實現多態.下面是另一種實現多態的方法-----------重寫父類方法

1.JAVA里沒有多繼承,一個類之能有一個父類。而繼承的表現就是多態。一個父類可以有多個子類,而在子類里可以重寫父類的方法(例如方法print()),這樣每個子類里重寫的代碼不一樣,自然表現形式就不一樣。這樣用父類的變量去引用不同的子類,在調用這個相同的方法print()的時候得到的結果和表現形式就不一樣了,這就是多態,相同的消息(也就是調用相同的方法)會有不同的結果。舉例說明:

 

  1. //父類  
  2. public class Father{  
  3. //父類有一個打孩子方法  
  4. public void hitChild(){  
  5. }  
  6. }  
  7. //子類1  
  8. public class Son1 extends Father{  
  9. //重寫父類打孩子方法  
  10. public void hitChild(){  
  11. System.out.println("為什么打我?我做錯什么了!");  
  12. }  
  13. }  
  14. //子類2  
  15. public class Son2 extends Father{  
  16. //重寫父類打孩子方法  
  17. public void hitChild(){  
  18. System.out.println("我知道錯了,別打了!");  
  19. }  
  20. }  
  21. //子類3  
  22. public class Son3 extends Father{  
  23. //重寫父類打孩子方法  
  24. public void hitChild(){  
  25. System.out.println("我跑,你打不著!");  
  26. }  
  27. }  
  28. //測試類  
  29. public class Test{  
  30. public static void main(String args[]){  
  31. Father father;  
  32. father = new Son1();  
  33. father.hitChild();  
  34. father = new Son2();  
  35. father.hitChild();  
  36. father = new Son3();  
  37. father.hitChild();  
  38. }  

 

都調用了相同的方法,出現了不同的結果!這就是多態的表現!

責任編輯:于鐵 來源: 互聯網
相關推薦

2011-07-11 16:35:28

Java

2009-06-19 14:10:42

Java多態性

2009-09-01 14:51:19

C#多態性

2023-10-20 09:51:00

編程開發

2010-02-01 14:07:12

C++多態性

2011-03-08 09:40:26

Java多態性

2010-01-28 16:16:32

C++多態性

2009-08-28 16:48:50

C#多態性

2009-09-01 15:08:18

C#多態性

2009-09-24 17:19:06

運行時多態性

2009-11-23 19:33:12

PHP5多態性

2011-07-22 17:41:02

java

2011-07-11 17:33:25

JAVA可移植性

2010-09-14 09:30:04

Java多態

2011-07-21 14:15:08

java

2020-09-26 21:44:57

If-Else代碼開發

2017-12-14 08:04:21

Java面試程序

2010-03-09 15:59:08

Linux硬盤掛載

2011-07-20 14:12:48

2011-04-06 08:57:07

C++java多態
點贊
收藏

51CTO技術棧公眾號

91人人爽人人爽人人精88v| 欧美一区二区三区四区高清| 免费日韩av电影| 少妇久久久久久久| 欧美日韩国产高清电影| 99re8这里有精品热视频8在线| 日韩精品一区二区三区免费观看| 91精品国产综合久久国产大片| 久久亚洲国产成人精品无码区| 香蕉视频911| 麻豆国产欧美一区二区三区| 久久久伊人日本| 久久久久久久久久久久久久久| 国产精品久久久久久av公交车| 婷婷国产v国产偷v亚洲高清| 亚洲巨乳在线观看| 少妇精品视频一区二区| 久久国内精品视频| 91精品国产免费久久久久久 | 久久福利视频网| 亚洲制服丝袜在线播放| 国产精品1区在线| 婷婷开心激情综合| 色撸撸在线观看| 日本黄在线观看| 国产精品18久久久久久久久久久久| 欧美一区亚洲一区| 国产成人无码aa精品一区| 国产欧美高清视频在线| 亚洲第一国产精品| 国产探花在线观看视频| 欧美韩国亚洲| 婷婷成人激情在线网| 黄色一级片av| av国产在线观看| 2022国产精品视频| 国产精品免费在线播放| 中文字幕欧美日韩va免费视频| 一本大道久久a久久精品综合| 亚洲最大福利视频| 免费黄色片视频| 亚洲国产二区| 成人午夜av| 日本va欧美va精品发布| 亚洲乱码国产乱码精品精的特点| 欧美在线日韩精品| 午夜成人鲁丝片午夜精品| 国产麻豆日韩欧美久久| 成人免费激情视频| 最近中文字幕在线视频| 久久福利毛片| 欧美综合第一页| 日韩成人免费在线观看| 欧美特黄视频| 欧美高清一级大片| 日本妇女毛茸茸| 一区二区三区网站| 伦理中文字幕亚洲| 国语对白在线播放| 你懂的成人av| 久久91精品国产91久久跳| 超碰手机在线观看| 欧美日韩综合| 久久人人爽人人爽人人片av高请| 久久香蕉精品视频| 亚洲作爱视频| 91成人福利在线| 久久久久久久黄色片| 亚洲欧美日韩视频二区| 国产成人精品综合| 中国a一片一级一片| 免费观看在线色综合| 成人免费大片黄在线播放| 国产视频一区二区三| 国产传媒日韩欧美成人| 精品日韩欧美| 男同在线观看| 亚洲欧洲日本在线| 欧美a级免费视频| 19禁羞羞电影院在线观看| 欧美性20hd另类| 亚洲一区二区三区四区五区xx| 欧美电影在线观看网站| 日韩一卡二卡三卡| 亚洲精品国产综合久久| 亚洲国产成人精品无码区99| 性欧美freesex顶级少妇| 色综合久久久久综合体| 粉色视频免费看| 一区二区三区四区高清视频| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 26uuu国产| 日本在线中文字幕一区| 色偷偷噜噜噜亚洲男人| 久久一级黄色片| 波多野结衣在线播放一区| 超碰在线公开| 成人污污视频在线观看| 久久视频在线观看中文字幕| 成人午夜电影在线观看| 国产偷国产偷精品高清尤物| 男女h黄动漫啪啪无遮挡软件| 色a资源在线| 日本高清不卡aⅴ免费网站| 亚洲五月激情网| 美女久久久久| 欧美巨乳美女视频| 无码aⅴ精品一区二区三区| 国产美女主播视频一区| 欧美成人蜜桃| 免费在线看电影| 欧美在线free| 大地资源二中文在线影视观看| 99精品小视频| 国产成人精品国内自产拍免费看| www.黄色国产| 91精品中文字幕| 九九国产精品视频| 另类小说综合网| 国产黄色一区二区三区| 日韩毛片一区| 亚洲黄色片网站| 久久久久99精品成人片试看| 日韩国产在线观看| 久久久久欧美| 91黄页在线观看| 51精品久久久久久久蜜臀| 精品人伦一区二区三电影| 在线视频观看日韩| av免费观看久久| 国产日产一区二区| 欧美日韩在线播放三区四区| 中文字幕人妻一区二区| 日韩午夜av| 91成人理论电影| 黄色网在线免费看| 美女主播精品视频一二三四| 欧美日韩精品免费| 国产精品扒开腿做爽爽| 亚洲国产专区| 国产精品久久精品视| 国产精品久久久久久福利| 欧美日韩三级视频| 手机av在线不卡| 日本网站在线观看一区二区三区| 欧美精品欧美精品| 超级碰碰久久| 亚洲色无码播放| 手机看片久久久| 久久久久久久久久电影| 国产激情在线观看视频| 国产一区二区三区电影在线观看 | 韩国成人动漫| 国产视频亚洲视频| 国产精品自拍99| 91看片淫黄大片一级在线观看| 黄色免费视频大全| 日韩精品亚洲aⅴ在线影院| 69av成年福利视频| 欧美在线观看在线观看| 欧洲一区二区三区在线| 少妇精品无码一区二区免费视频 | 99国产精品免费视频| 欧美黄色精品| 国产精选一区二区| 欧美a级在线观看| 国产一区二区美女视频| 一区不卡在线观看| 亚洲欧美激情小说另类| 亚洲熟女乱综合一区二区| 亚洲精品91| 国产精品高清一区二区三区| 国产在线视频99| 成人精品在线| 久久成人精品一区二区三区| av免费在线不卡| 午夜av一区二区三区| 国产精品揄拍100视频| 日本网站在线观看一区二区三区| japanese在线视频| 在这里有精品| 国产成人精品久久亚洲高清不卡| www.亚洲.com| 日韩欧美资源站| 亚洲免费在线观看av| 国产精品午夜春色av| 熟妇无码乱子成人精品| 午夜一区不卡| 中文字幕av日韩精品| 成人精品毛片| 国产99久久久欧美黑人| 国产不卡在线| 国产午夜精品久久久 | 91精品国产色综合久久| 久久综合色综合| 日本一二三不卡| 91视频在线免费| 日本欧美在线看| 免费看毛片的网址| 日韩精品不卡一区二区| 国产精品免费区二区三区观看 | 免费在线看黄色| 亚洲国产欧美久久| 一二三四区视频| 精品久久久在线观看| 欧美一级片在线视频| eeuss影院在线观看| 欧美一区三区四区| 久久夜色精品国产噜噜亚洲av| eeuss鲁一区二区三区| 青青草原综合久久大伊人精品优势 | 99久久99精品久久久久久| 免费看污污网站| 亚洲日本黄色| 国产又大又长又粗又黄| 九九久久婷婷| 国产欧美一区二区三区另类精品| 青青在线精品| 国产91在线播放精品91| 超碰在线网站| 欧美久久精品午夜青青大伊人| 久久电影中文字幕| 亚洲国产精彩中文乱码av| 国产内射老熟女aaaa∵| 欧美羞羞免费网站| 四虎成人在线观看| 亚洲一区二区三区影院| 亚洲xxxx3d动漫| 国产精品久久久久久久久动漫| 一区二区黄色片| 91麻豆6部合集magnet| www男人天堂| 国产传媒欧美日韩成人| 国产精品igao网网址不卡| 麻豆91在线看| 国产淫片av片久久久久久| 夜夜嗨av一区二区三区网站四季av| 国产一级片91| 一区二区中文字| 手机在线视频你懂的| 天堂美国久久| 一区二区三区四区在线视频| 精品日韩毛片| 日韩欧美在线电影| 国内精品久久久久久久影视简单| 欧美日韩在线精品| 国产成人3p视频免费观看| 欧美三级电影在线播放| 欧美精美视频| 无码免费一区二区三区免费播放 | 精品国模一区二区三区欧美| 成人欧美一区二区三区在线 | 欧美日本在线一区| 亚洲午夜精品久久久| 欧美色涩在线第一页| 在线观看免费黄色小视频| 777久久久精品| 99视频国产精品免费观看a| 欧美一级久久久| 亚洲av综合色区无码一二三区| 日本一区精品视频| 亚洲国产高清一区| 极品日韩久久| 欧美日韩一区二区三区在线电影| 国产美女精品久久久| 网红女主播少妇精品视频| 欧美日韩一区二区三| 日韩高清欧美| 男人的天堂视频在线| 韩国欧美一区| 99久久久无码国产精品6| 免费观看在线综合| 曰本三级日本三级日本三级| av一区二区三区四区| 亚洲欧美视频在线播放| 国产日韩欧美高清| 爱爱视频免费在线观看| 亚洲一本大道在线| 无码人妻av免费一区二区三区| 欧美日韩专区在线| www男人的天堂| 亚洲免费视频一区二区| 在线毛片网站| 欧美激情视频免费观看| 日本不卡一区二区在线观看| 亚洲精品推荐| 亚洲精品一卡二卡三卡四卡| 伊人久久大香线蕉精品组织观看| 欧美久久在线观看| 久久一区亚洲| 久久黄色一级视频| 久久久噜噜噜久噜久久综合| 中国一级片在线观看| 亚洲午夜av在线| 天堂网一区二区| 日韩视频一区在线观看| 国产福利在线视频| 九色精品免费永久在线| 欧洲一区二区三区精品| 91亚洲国产成人精品性色| 天海翼精品一区二区三区| 欧美成人黑人xx视频免费观看| 国产综合精品在线| 中文字幕一区二区三区色视频| 国产精品二区一区二区aⅴ| 精品视频在线看| 五月婷婷丁香花| 蜜臀久久99精品久久久无需会员| 美女福利一区二区| 亚洲一区久久久| 欧美日韩伦理| 国产美女无遮挡网站| 国产麻豆视频一区二区| 亚洲图片第一页| 无码av免费一区二区三区试看| 国产偷拍一区二区| 在线色欧美三级视频| 性感女国产在线| 国产一区二区无遮挡| 1024精品久久久久久久久| 香蕉视频网站入口| 久久久天堂av| 欧美久久久久久久久久久久| 欧美精品第一页| a天堂在线资源| 欧美亚洲另类视频| 大奶一区二区三区| 特级西西人体www高清大胆| 久草中文综合在线| 蜜桃传媒一区二区亚洲| 狠狠久久五月精品中文字幕| 好吊视频一二三区| 欧美乱大交xxxxx| japansex久久高清精品| 一区二区不卡在线观看| 日韩高清一区在线| 青青草视频成人| 欧美视频裸体精品| 天天操天天干天天插| 国语自产在线不卡| 精品人人人人| 霍思燕三级露全乳照| av亚洲精华国产精华| 一区二区三区视频免费看| 亚洲成人亚洲激情| hd国产人妖ts另类视频| 国产偷久久久精品专区| 亚洲精品三级| 精品久久久久久中文字幕人妻最新| 天天亚洲美女在线视频| 亚洲欧美另类一区| 欧美高清videos高潮hd| 亚洲**毛片| 欧美久久在线观看| 99re热这里只有精品免费视频| 欧美日韩综合在线观看| 亚洲欧美激情精品一区二区| 欧美日韩不卡| 天天成人综合网| 国产成人在线免费观看| 日韩影片在线播放| 精品久久久网| 国产精品99久久久久久大便| 久久国产成人午夜av影院| 99久久99久久精品国产| 精品欧美一区二区在线观看| 国产精品论坛| 日本10禁啪啪无遮挡免费一区二区| 日本欧美在线看| 日韩va亚洲va欧美va清高| 欧美精品一区二区高清在线观看| 天堂中文最新版在线中文| 日韩av在线电影观看| 国内一区二区视频| 国产午夜福利精品| 国产香蕉精品视频一区二区三区| 欧美大片网站| 一二三四视频社区在线| 国产亚洲一二三区| 91麻豆国产在线| 久久久久日韩精品久久久男男| 一本色道久久综合亚洲精品酒店| 最近中文字幕一区二区| 亚洲黄色在线视频| 青青草在线视频免费观看| 国产一区二区香蕉| 亚洲精品人人| 蜜桃视频最新网址| 亚洲精品在线一区二区| 成人不卡视频| 五月丁香综合缴情六月小说| 中文字幕精品一区二区三区精品| 性生活三级视频| 国产精品久久久久久婷婷天堂| 欧美日韩一区自拍| 网爆门在线观看| 日韩av在线高清| 精品国产一区二| 天堂社区在线视频| 亚洲电影在线免费观看|