亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

進一步理解Java中的多態概念

2019-11-26 15:01:11
字體:
來源:轉載
供稿:網友

多態性有兩種:
1)編譯時多態性
對于多個同名方法,如果在編譯時能夠確定執行同名方法中的哪一個,則稱為編譯時多態性.
2)運行時多態性
如果在編譯時不能確定,只能在運行時才能確定執行多個同名方法中的哪一個,則稱為運行時多態性.

方法覆蓋表現出兩種多態性,當對象獲得本類實例時,為編譯時多態性,否則為運行時多態性,例如:
XXXX x1 = new XXXX(參數列表); //對象獲得本類實例,對象與其引用的實例類型一致
XXX xx1 = new XXX(參數列表);
x1.toString(); //編譯時多態性,執行XXX類的方法.
xx1.toString(); //編譯時多態性,執行XXXX類覆蓋的方法.
XXXX為XXX的父類.
由于子類對象既是父類對象,父類對象與子類對象之間具有賦值相容性,父類對象能夠被賦值為子類對象.例如,
XXXX x2 = new XXX(參數列表); //父類對象獲得子類實例,子類對象即是父類對象
x2.toString(); //運行時多態
 
x2聲明為父類對象卻獲得子類XXX的實例,那么x2.toString()究竟執行父類方法還是執行子類覆蓋的方法呢?
這分為兩種情況:
取決于子類是否覆蓋父類方法.如果子類覆蓋父類方法,則執行子類方法;
如果沒有覆蓋,則執行父類方法.
在編譯時,僅僅依據對象所屬的類,系統無法確定到底應該執行那個類的方法,只有運行時才能確定,因此這是運行時多態.
父類對象并不能執行所有的子類方法,只能執行那些父類中聲明/子類覆蓋的子類方法.

java多態實現
java的多態和c++一樣,是通過動態綁定或者說運行時綁定來實現的。當調用某一個對象引用的方法時,因為編譯器并不知道這個引用到底指向的是變量聲明時說明的類型對象,還是該類型子類的對象。因此編譯器無法為這次調用綁定到具體的某個方法。只有通過java中運行時類型識別(RTT)在運行時綁定到具體的方法

方法的重寫overriding和方法的重載overloading是java多態的不同表現。重寫overriding是父類和子類之間多態性的一種表現,重載overloading是一個類中多態性的表現。

給出一個具體例子:

  

 class People {   public String toString() {    return "I am a people!";   }     public void eat() {   };     public void speak() {   };  }    class Boy extends People {   public String toString() {    return "I am a boy!";   }     public void fight() {   };     public void speak() {   };  }    class Girl extends People {   public String toString() {    return "I am a girl!";   }     public void sing() {   };     public void speak() {   };  }    public class TestToString {   public static void main(String args[]) {    People p = new Girl();    System.out.println(p.toString());   }  } 

運行結果是:

I am a girl!

p是People的一個引用,但是在運行時因為是Girl對象,所以還是調用了Girl的toString方法


深入理解java多態
聲明,這里借鑒了其他同學的例子,原文鏈接:http://blog.csdn.net/thinkghoster/article/details/2307001

測試題目

 class A {   public String show(D obj) {    return "A and D";   }      public String show(A obj) {    return "A and A";   }  }    class B extends A {   public String show(B obj) {    return "B and B";   }      public String show(A obj) {    return "B and A";   }  }    class C extends B {     }    class D extends B {     }    public class Main {   public static void main(String args[]) {    A a1 = new A();    A a2 = new B();    B b = new B();    C c = new C();    D d = new D();        System.out.println(a1.show(b)); // 1    System.out.println(a1.show(c)); // 2    System.out.println(a1.show(d)); // 3    System.out.println(a2.show(b)); // 4    System.out.println(a2.show(c)); // 5    System.out.println(a2.show(d)); // 6    System.out.println(b.show(b)); // 7    System.out.println(b.show(c)); // 8    System.out.println(b.show(d)); // 9   }  } 

答案

 A and A  A and A  A and D  B and A  B and A  A and D  B and B  B and B  A and D 

解析
我開始做這道題目,4、5、6、9全部做錯了,原因就是沒能很好的理解java的多態性,這里說明一下

首先,要深刻的理解重寫和重載,重寫不僅僅包括了函數名稱相同,也包括參數類型和返回值類型

其次,深刻理解這句話“當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,但是這個被調用的方法必須是在超類中定義過的,也就是說被子類重寫的方法”

然后,我們在來分析一下這幾道題目

問題:你認為B重寫了父類A的show方法了嗎?如果重寫了,重寫了幾個?

答案:重寫了,重寫了一個,也就是public String show(A obj),為什么public String show(B obj)不算重寫父類方法呢,很簡單,因為參數類型不同

舉例分析
看了上面的分析,我們也來分析兩個例子:

一、a2.show(b):

a2是一個引用變量,類型為A,b是B的一個實例。首先,在類A中找show(B obj),沒有找到。于是到A的超類中找,而A沒有超類,因此轉向了A.this((super)B),(super)B為A,因此在A中找到了show(A obj)的方法,但是由于a2引用的類B的一個對象,B重寫了A的show(A obj)方法,因此最終鎖定到類B的show(A obj),輸出為“B and A”

二、a2.show(c):
a2是一個引用變量,類型為A,b是B的一個實例。首先,在類A中找show(C obj),沒有找到。于是到A的超類中找,而A沒有超類,因此轉向了A.this((super)C),(super)C為B,到這里為止,這個a2.show(c)變成了a2.show(b)的問題,而a2.show(b)上面已經分析了是輸出"B and A",因此這里也是輸出“B and A”


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av中文字幕在线播放| 国产精品一区二区在线| 一区二区三区无码高清视频| 欧美日韩中文在线观看| 亚洲欧美制服另类日韩| 国产精品美女午夜av| 欧洲永久精品大片ww免费漫画| 精品性高朝久久久久久久| 日韩中文字幕网| 国模精品系列视频| 欧美色videos| 国产一区二区三区免费视频| 1769国产精品| 亚洲第一区第二区| 欧美性视频在线| 亚洲二区中文字幕| 精品视频在线导航| 色偷偷av一区二区三区乱| 国产日韩欧美自拍| 狠狠色香婷婷久久亚洲精品| 欧美日韩在线免费观看| 51ⅴ精品国产91久久久久久| 国产精品久久二区| 亚洲视频网站在线观看| 亚洲欧美日韩中文在线| 国产精品大陆在线观看| 国产精品视频yy9099| 亚洲视频欧洲视频| 久久夜色精品亚洲噜噜国产mv| 热门国产精品亚洲第一区在线| 国产精品丝袜高跟| 色视频www在线播放国产成人| 国产精品影片在线观看| 国产精品爽黄69天堂a| 国产精品久久久久高潮| 91精品久久久久久久久久久| 欧美国产激情18| 国产精品1234| 国内精品一区二区三区| 亚洲国产天堂久久综合网| 97在线看免费观看视频在线观看| 日韩成人av一区| 精品自拍视频在线观看| yw.139尤物在线精品视频| 日韩欧美一区二区三区久久| 国产成人精品在线视频| 国产精品久久久久免费a∨大胸| 亚洲欧美国产日韩中文字幕| 色综合色综合网色综合| 日韩精品在线第一页| 欧美亚洲国产视频| 九九九久久国产免费| 国产亚洲欧美日韩美女| 亚洲性猛交xxxxwww| 日韩欧美极品在线观看| 97视频免费在线观看| 国产欧美亚洲视频| 国产精品视频99| 国产成人精品一区| 成人免费视频xnxx.com| 久久夜色精品国产欧美乱| 庆余年2免费日韩剧观看大牛| 国产+成+人+亚洲欧洲| 欧美亚洲视频一区二区| 久久99久久亚洲国产| 久久777国产线看观看精品| 欧美高清一级大片| 日本欧美黄网站| 日韩精品免费一线在线观看| 一区二区在线视频| 国产精品入口尤物| 97久久久免费福利网址| 正在播放欧美视频| 国产成人精品一区二区三区| 国产成人91久久精品| 欧美性视频精品| 成人中文字幕在线观看| 国产在线视频2019最新视频| 中文字幕亚洲在线| 亚洲精品日韩久久久| 亚洲欧美日韩中文在线| 精品久久国产精品| 亚洲精品国精品久久99热| 日韩hd视频在线观看| 午夜精品久久久久久99热软件| 精品国产精品三级精品av网址| 国外成人在线直播| 亚洲aⅴ男人的天堂在线观看| 国产丝袜一区二区三区免费视频| 久久视频国产精品免费视频在线| 最近更新的2019中文字幕| 久久久精品欧美| 亚洲国产日韩一区| 在线观看日韩视频| 亚洲国产91精品在线观看| 国产成人一区二区三区小说| 国产精品v片在线观看不卡| 国产精品第七十二页| 亚洲国产精品国自产拍av秋霞| 亚洲无亚洲人成网站77777| 亚洲最大福利网| 日韩av在线网址| 国产精品黄页免费高清在线观看| 亚洲欧美在线看| 亚洲新中文字幕| 国产精品成人aaaaa网站| 97精品久久久| 91精品国产乱码久久久久久蜜臀| 国产亚洲欧美一区| 精品毛片三在线观看| 欧美在线视频一区| 久久久精品日本| 久久av在线看| 在线播放精品一区二区三区| 久久久精品中文字幕| 欧美丰满少妇xxxxx| 久久久久免费精品国产| 九九精品在线视频| 亚洲人成电影在线| 国内精品久久久久影院 日本资源| 毛片精品免费在线观看| 国产精品h在线观看| 日韩精品免费在线视频观看| 国产成人精品免高潮在线观看| 日韩中文视频免费在线观看| 午夜剧场成人观在线视频免费观看| 亚洲精品国产精品国产自| 国产精品99久久久久久白浆小说| 亚洲天堂色网站| 欧美床上激情在线观看| 欧美激情久久久久久| 国产va免费精品高清在线观看| 国产精品久久久精品| 亚洲精品欧美一区二区三区| 国产精品久久久久久久久久新婚| 在线看片第一页欧美| 亚洲第一色在线| 91人人爽人人爽人人精88v| 欧美黑人狂野猛交老妇| 亚州成人av在线| 国产精品视频区1| 国内精品视频久久| 精品视频www| 日本sm极度另类视频| 久久久视频精品| 亚洲精品欧美日韩| 欧美精品生活片| 久久久久久这里只有精品| 少妇高潮久久久久久潘金莲| 久久国产加勒比精品无码| 伊人av综合网| 69久久夜色精品国产69乱青草| 日韩精品极品在线观看| 成人福利视频在线观看| 黑人巨大精品欧美一区二区免费| 亚洲国产精品成人一区二区| 久久免费视频网站| 精品美女永久免费视频| 久久久久久久一区二区| 国产成人精品a视频一区www| 国产亚洲欧美aaaa| 日韩在线观看免费全集电视剧网站| 欧美黄色片在线观看| 国产日韩在线播放|