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

posts - 195,  comments - 30,  trackbacks - 0
多態 (Polymorphism) 大家應該都不陌生,它是我們開發面向對象系統的“老朋友”了 。但是老朋友也會有“煩心”的時候啊,呵呵。有時候不注意,還真會被它難到。譬如下面這個例子(thank Hayden)。大家可以先不看下面的答案,在自己腦海中運行一道,看看自己想的跟實際結果是否相符。
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......");
 }
}
下面是它的運行結果:
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......

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

posted on 2011-04-08 18:35 luis 閱讀(350) 評論(0)  編輯 收藏 引用 所屬分類: Java筆記
<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

文章分類

文章檔案

友情鏈接

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            9久re热视频在线精品| 欧美电影美腿模特1979在线看| 欧美日韩精品免费观看视一区二区| 制服丝袜亚洲播放| 亚洲国产另类精品专区| 久久看片网站| 久久久午夜精品| 久久国产一区| 在线国产日韩| 亚洲国产一区二区三区高清| 国产一区二区三区精品久久久| 国产精品久久9| 国产日韩欧美在线| 国产伦精品一区二区三区照片91 | 亚洲国产精品精华液2区45| 久久久夜夜夜| 欧美不卡一卡二卡免费版| 欧美精品久久久久久久久老牛影院 | 国产亚洲精品一区二555| 国产麻豆精品视频| 国产一区二区精品久久91| 国产热re99久久6国产精品| 国产综合激情| 一本一道久久综合狠狠老精东影业| 亚洲免费观看高清完整版在线观看熊 | 欧美日韩午夜在线视频| 国产精品成人一区二区网站软件| 国产精品一二三四| 亚洲黄色影院| 香蕉久久精品日日躁夜夜躁| 你懂的视频欧美| 在线视频欧美日韩精品| 欧美一区二区三区在线观看视频| 久久久另类综合| 最新中文字幕一区二区三区| 9色porny自拍视频一区二区| 久久精品九九| 国产精品嫩草99av在线| 亚洲国产另类 国产精品国产免费| 午夜精品三级视频福利| 国产亚洲一区精品| 伊人久久噜噜噜躁狠狠躁| 99伊人成综合| 噜噜噜躁狠狠躁狠狠精品视频| 这里是久久伊人| 久久精品国产综合| 亚洲图片在线| 欧美欧美全黄| 亚洲美女免费视频| 欧美黑人在线播放| 久久久伊人欧美| 亚洲缚视频在线观看| 久久久久.com| 欧美一级午夜免费电影| 国产精品系列在线播放| 亚洲小少妇裸体bbw| 91久久极品少妇xxxxⅹ软件| 久久这里有精品视频| 亚洲国产精品一区二区第一页| 久久久久久香蕉网| 亚洲一区二区三区午夜| 亚洲国产日韩美| 欧美精品综合| 亚洲一区二区不卡免费| av成人国产| 国产精品久久久久久av福利软件 | 亚洲欧美一区二区三区久久| 欧美日韩视频在线第一区| 夜夜嗨av一区二区三区免费区| 亚洲免费黄色| 国产亚洲成人一区| 欧美激情aⅴ一区二区三区| 欧美激情影院| 久久不射电影网| 久久综合九色综合欧美就去吻| 91久久精品www人人做人人爽| 亚洲伦伦在线| 国产欧美一级| 亚洲美女啪啪| 国户精品久久久久久久久久久不卡| 蜜桃久久精品一区二区| 欧美日韩一区二区三区在线| 一本色道久久综合亚洲精品小说| 欧美一区二区在线观看| 亚洲中字在线| 国产在线不卡视频| 亚洲精品美女在线观看| 国产亚洲精品高潮| 亚洲免费播放| 亚洲国产另类 国产精品国产免费| 一区二区三区精品久久久| 在线成人av网站| 午夜精品一区二区三区四区| 亚洲激情一区二区| 欧美一区二区三区视频免费播放| 亚洲乱码国产乱码精品精天堂| 午夜精品久久久久久久白皮肤 | 欧美女同视频| 亚洲国产va精品久久久不卡综合| 国产曰批免费观看久久久| 亚洲欧美成人一区二区三区| 亚洲天堂激情| 国产麻豆午夜三级精品| 亚洲在线1234| 欧美在线欧美在线| 国产女人aaa级久久久级| 亚洲网友自拍| 久久久国产一区二区三区| 999亚洲国产精| 日韩午夜在线视频| 欧美日韩国产一区二区三区| 亚洲黄色在线视频| 在线视频精品一| 国产欧美亚洲日本| 久久国产视频网| 亚洲国产你懂的| 亚洲一级片在线观看| 国产精品一区二区三区观看| 欧美亚洲一区| 六月婷婷久久| 一区二区三区**美女毛片| 国产精品美女999| 欧美专区在线观看一区| 亚洲成色最大综合在线| 亚洲综合国产激情另类一区| 国产一区在线视频| 欧美大胆a视频| 亚洲一区欧美一区| 欧美激情视频在线免费观看 欧美视频免费一 | 精品91在线| 欧美日韩国产一区精品一区| 亚洲欧美另类中文字幕| 欧美护士18xxxxhd| 久久精品国产亚洲高清剧情介绍 | 亚洲福利视频网| 亚洲一区二区三区免费视频| 亚洲韩日在线| 亚洲第一黄网| 激情亚洲一区二区三区四区| 国产精品盗摄一区二区三区| 欧美激情一区二区三区不卡| 久久中文字幕一区| 久久久综合香蕉尹人综合网| 久久精品日韩| 久久一二三四| 久久中文字幕一区| 麻豆精品在线播放| 久久一二三区| 欧美日韩99| 欧美视频免费在线| 国产精品亚洲产品| 国产精品你懂的| 国精产品99永久一区一区| 亚洲久久一区| 先锋影音网一区二区| 久久成人av少妇免费| 久久亚洲春色中文字幕久久久| 久久婷婷亚洲| 欧美日韩另类丝袜其他| 国产精品久久99| 国产一区在线免费观看| 在线看一区二区| 一区二区欧美激情| 欧美亚洲综合网| 免费久久精品视频| 日韩视频在线永久播放| 一本大道久久a久久精品综合| 亚洲免费影院| 欧美成人免费观看| 亚洲视频免费在线| 久久婷婷丁香| 国产精品久久二区二区| 在线看一区二区| 亚洲永久精品大片| 欧美成人官网二区| 亚洲宅男天堂在线观看无病毒| 裸体一区二区三区| 国产亚洲精品久久久| 欧美日本亚洲| 一区二区三区在线视频观看| 久久综合伊人77777麻豆| 99国产精品99久久久久久粉嫩| 午夜精品久久久久久久| 欧美日韩国产高清视频| 亚洲成人自拍视频| 亚洲欧美日韩在线综合| 欧美激情欧美狂野欧美精品| 亚洲一区二区三区在线播放| 一二三四社区欧美黄| 亚洲欧美日韩精品久久奇米色影视| 亚洲神马久久| 久久噜噜亚洲综合| 欧美激情第一页xxx| 国产精品夜色7777狼人| 国内不卡一区二区三区| 99国产精品久久久久老师| 先锋亚洲精品| 亚洲福利视频一区二区| 亚洲国产另类久久久精品极度| 亚洲国产成人久久综合|