青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 195,  comments - 30,  trackbacks - 0
多態(tài) (Polymorphism) 大家應(yīng)該都不陌生,它是我們開發(fā)面向?qū)ο笙到y(tǒng)的“老朋友”了 。但是老朋友也會(huì)有“煩心”的時(shí)候啊,呵呵。有時(shí)候不注意,還真會(huì)被它難到。譬如下面這個(gè)例子(thank Hayden)。大家可以先不看下面的答案,在自己腦海中運(yùn)行一道,看看自己想的跟實(shí)際結(jié)果是否相符。
public class Polymorphism{
 public static void main(String[] args) {
  A b = new B();
  b.fb();
 }
}
class A {
 public A(){
  
 }
 public void fa() {
  System.out.println("CLASS A :Function fa Runing......");
 }

 public void fb() {
  System.out.println("CLASS A :Function fb Runing......");
  fa();
  System.out.println("CLASS A :Function fb Stop......");
 }
}
class B extends A {
 public B(){
 }
 public void fa() {
  System.out.println("CLASS B :Function fa Runing......");
 }

 public void fb() {
  System.out.println("CLASS B :Function fb Runing......");
  super.fb();
  System.out.println("CLASS B :Function fb Stop......");
 }
}
下面是它的運(yùn)行結(jié)果:
CLASS B :Function fb Runing......
CLASS A :Function fb Runing......
CLASS B :Function fa Runing......
CLASS A :Function fb Stop......
CLASS B :Function fb Stop......

   怎么樣,猜對(duì)結(jié)果了嗎?如果結(jié)果跟你想象的一模一樣,那么恭喜你,你對(duì)多態(tài)已經(jīng)有初步了解了,起碼在語法層次上是比較熟悉了。但是,千萬不要“洋洋得意”,你可否解析結(jié)果為什么會(huì)是這樣嗎?我們可以先來梳理一下程序流程:
   1、運(yùn)行main函數(shù),創(chuàng)建B對(duì)象(A b = new B(),完全可以替代B b=new B();),調(diào)用B的方法fb,于是打印出"CLASS B :Function fb Runing......",都在情理之中。
   2、執(zhí)行super.fb(),調(diào)用父類A的方法fb,首先打印出"CLASS A :Function fb Runing......",預(yù)料之中
   3、執(zhí)行方法fa(),打印出"CLASS B :Function fa Runing......",呃?奇怪了,為什么不是執(zhí)行A的方法fa(),而是子類B中的fa()呢?當(dāng)前被執(zhí)行的是類A的方法,那么虛擬機(jī)找到的應(yīng)該是A類的Method Table,找到的應(yīng)該是A類的方法fa()啊?難解~
   4、打印"CLASS A :Function fb Stop......",返回
   5、打印"CLASS A :Function fb Stop.....",返回,程序結(jié)束。
  現(xiàn)在問題清楚了,就是虛擬機(jī)在執(zhí)行類A方法的時(shí)候查找的Method Table竟然是子類B的。為什么呢?其實(shí),只要我們清楚java方法調(diào)用的方式,這個(gè)問題就迎刃而解了。在Java虛擬機(jī)中,每啟動(dòng)一個(gè)新的線程,虛擬機(jī)都會(huì)為它分配一個(gè)Java棧,而每當(dāng)線程調(diào)用一個(gè)java方法時(shí),虛擬機(jī)就會(huì)在該線程的java棧中壓入一個(gè)新幀,用以存儲(chǔ)參數(shù),局部變量等數(shù)據(jù)。我們將這個(gè)正在被執(zhí)行的方法稱為該線程的當(dāng)前方法,其相應(yīng)的棧幀為當(dāng)前幀。
    好了,當(dāng)我們調(diào)用一個(gè)方法時(shí),我們需要往當(dāng)前幀中壓入哪些參數(shù)呢?簡(jiǎn)單,方法的參數(shù)列表中不是都說得清清楚楚的嗎?嗯,對(duì)于C語言來說,這個(gè)說法是正確的,但是對(duì)于諸如C++,Java,Python等面向?qū)ο笳Z言來說,卻是不對(duì)的。大家還記得那個(gè)"this"指針嗎?!不錯(cuò),在Java中,所有的實(shí)例方法(Instance Method)調(diào)用的時(shí)候都會(huì)把當(dāng)前對(duì)象壓入當(dāng)前幀中,Java虛擬機(jī)正是通過這個(gè)參數(shù)來決定當(dāng)前所使用的類(通過判斷該對(duì)象的類型)
    在上面的例子中,main中調(diào)用b.fb()時(shí),壓入的當(dāng)前對(duì)象自然是B類對(duì)象,我們記為b。在B的fb()中調(diào)用super.fb()時(shí),壓入的就是剛剛壓入的對(duì)象,也就是b了。同樣,在A的fb中調(diào)用fa()時(shí),壓入的也是b。因此,在使用 invokevirtual指令調(diào)用fa()時(shí),找的就是B的方法表(當(dāng)前對(duì)象b的類型為B),也就執(zhí)行了類B的fa了。
    這種現(xiàn)象在構(gòu)造函數(shù)中特別常見,因?yàn)闃?gòu)造函數(shù)中會(huì)隱含使用調(diào)用父類的構(gòu)造函數(shù)的,如果在父類的構(gòu)造函數(shù)中調(diào)用了實(shí)例方法(如 A的fa),而在子類中又覆蓋了這個(gè)實(shí)例方法(如 B的fa),那么得到的結(jié)果往往不是我們所要的。因此,我們最好不要在構(gòu)造函數(shù)中使用多態(tài)方法,不然,Debug會(huì)很痛苦的:)

posted on 2011-04-08 18:35 luis 閱讀(350) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Java筆記
<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

文章分類

文章檔案

友情鏈接

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美极品影院| 亚洲夜晚福利在线观看| 亚洲精选久久| 亚洲区第一页| 91久久线看在观草草青青| 影音欧美亚洲| 亚洲国产日韩美| 亚洲人成绝费网站色www| 日韩一级免费| 午夜精品久久久久久| 久久久久久久波多野高潮日日| 蜜臀av一级做a爰片久久| 亚洲高清视频在线观看| 亚洲国产清纯| 在线亚洲一区| 久久精品一区二区国产| 欧美国产日产韩国视频| 欧美日韩一二区| 国产欧美精品日韩| 91久久久一线二线三线品牌| 亚洲视频www| 久久精品欧美日韩| 亚洲黄色三级| 欧美一区二区三区的| 欧美a级理论片| 国产精品一区二区在线| 最新国产成人在线观看| 欧美在线看片a免费观看| 亚洲国产高清在线| 香蕉久久夜色精品| 欧美久久一级| 一区二区在线视频观看| 亚洲欧美激情四射在线日 | 久久综合色综合88| 欧美三级黄美女| 精品成人在线视频| 亚洲欧美激情四射在线日| 欧美成人黑人xx视频免费观看| 一区二区三区福利| 香蕉成人啪国产精品视频综合网| 欧美激情一区| 午夜视频在线观看一区二区| 欧美激情精品久久久久久黑人| 国产欧美日韩精品丝袜高跟鞋| 亚洲精品久久久久| 久久久亚洲高清| 亚洲一区二区三区高清不卡| 欧美精品一卡二卡| 永久久久久久| 久久九九国产精品怡红院| 在线一区二区三区做爰视频网站| 欧美v日韩v国产v| 1024日韩| 欧美不卡视频一区| 久久久久高清| 伊人久久大香线| 久久人人九九| 久久精品免费电影| 黄色亚洲大片免费在线观看| 欧美一区激情| 亚洲欧美日韩另类精品一区二区三区| 欧美日本在线看| 日韩亚洲国产精品| 亚洲日本视频| 欧美剧在线观看| 日韩午夜激情电影| 91久久精品国产91性色| 欧美**人妖| 亚洲精品在线视频| 亚洲国产色一区| 欧美激情网站在线观看| 亚洲精品久久久一区二区三区| 亚洲第一天堂无码专区| 欧美国产日韩二区| 亚洲一区二区三区乱码aⅴ| 一区二区三区久久| 国产精品稀缺呦系列在线| 欧美一级免费视频| 久久超碰97人人做人人爱| 又紧又大又爽精品一区二区| 欧美刺激性大交免费视频| 男人天堂欧美日韩| 在线亚洲欧美专区二区| 亚洲一级二级| 黄色成人片子| 亚洲精品乱码视频| 国产一区二区| 亚洲国产一区二区三区高清 | 亚洲福利视频网| 欧美视频一二三区| 久久精品国产久精国产思思| 久久精品成人| 一本色道久久88亚洲综合88| 亚洲一区二区三区乱码aⅴ| 伊人色综合久久天天| 亚洲精品综合| 狠狠色伊人亚洲综合成人| 亚洲精品视频免费| 国产三级欧美三级| 欧美在线观看网站| 久久久久九九九九| 一区二区欧美日韩| 久久国产精品久久久久久| 亚洲精品中文在线| 欧美一区二区高清| 一区二区精品在线| 久久久亚洲高清| 亚洲免费婷婷| 欧美激情bt| 欧美大片专区| 国产视频观看一区| 一本久久综合亚洲鲁鲁五月天| 激情综合亚洲| 亚洲一区二区三区精品视频| 亚洲精选大片| 久久美女性网| 久久黄色网页| 国产精品天天看| 亚洲最新在线| 亚洲美女在线观看| 免费在线成人| 免费在线播放第一区高清av| 国产欧美日本一区二区三区| 亚洲免费观看| av成人免费观看| 欧美肥婆在线| 欧美国产欧美综合| 在线免费观看成人网| 久久国产免费看| 久久成人羞羞网站| 国产日产精品一区二区三区四区的观看方式| 亚洲国产va精品久久久不卡综合| 国内精品一区二区三区| 性做久久久久久久免费看| 亚洲欧美日韩精品久久亚洲区 | 欧美激情91| 精品9999| 麻豆精品网站| 亚洲福利视频网| 亚洲精品一区在线观看香蕉| 欧美大片在线看免费观看| 欧美多人爱爱视频网站| 亚洲激情av在线| 欧美国产精品一区| 一本色道久久综合亚洲精品小说 | 性色av一区二区三区在线观看| 新67194成人永久网站| 国产九区一区在线| 欧美在线观看一二区| 久久男人av资源网站| 亚洲国产成人午夜在线一区| 美女黄色成人网| 最新国产の精品合集bt伙计| 99精品国产一区二区青青牛奶| 欧美日韩国产专区| 亚洲欧美日韩精品久久久久| 久久久久久久久岛国免费| 在线观看精品视频| 欧美成人亚洲成人| 亚洲三级电影全部在线观看高清| 一区二区三区久久| 亚洲你懂的在线视频| 久久www成人_看片免费不卡| 黄色亚洲免费| 欧美精品九九99久久| 亚洲午夜精品久久久久久浪潮| 午夜精品一区二区三区电影天堂| 国产亚洲精品成人av久久ww| 鲁鲁狠狠狠7777一区二区| 99热这里只有精品8| 久久精品欧美日韩| aa级大片欧美三级| 国产综合欧美| 欧美日韩免费一区| 久久黄色网页| 亚洲精品小视频| 久久久999精品视频| 99re6这里只有精品| 国内精品国产成人| 欧美另类在线观看| 久久精品动漫| 一区二区三区国产| 亚洲第一精品影视| 久久久99久久精品女同性| 日韩一级欧洲| 影视先锋久久| 国产欧美va欧美不卡在线| 欧美激情aⅴ一区二区三区| 欧美一区二区三区四区高清 | 夜夜爽av福利精品导航| 久久亚洲图片| 亚洲欧美日韩精品久久亚洲区 | 日韩视频在线你懂得| 国产欧美大片| 欧美日韩综合不卡| 欧美不卡高清| 久久久久久综合| 香蕉久久一区二区不卡无毒影院| 亚洲久久一区| 欧美激情第8页|