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

首頁 > 學院 > 開發設計 > 正文

JAVA多態性

2019-11-18 11:52:52
字體:
來源:轉載
供稿:網友

  原作 :zosatapo
  
  我在這里公開和我dennisboys的學習交流信件,我們主要在談java中多態性問題。
  這里感謝我的好朋友能給我一個結合自己能力解釋問題的機會,在解釋中有出錯
  或者需要討論的部分希望能通知我一聲。
  
  
  上篇關于多態性的文章請參閱我前面寫的<>.
  
  
  
  *******************************************************************************
   網友dennisboys的提問部分開始
  *******************************************************************************
  從頭到尾把你的代碼看了n次,畫了n個圖(關于父類和子類的函數地址圖),有以下一些迷惑
  test t=new test();
  base b=new base();
  b=t;
  
  
  /*
  問題一:
  這里是把父類的引用指向子類,那是不是說調用父類的方法就等于調用子類的方法呢?就是
  假如b.display2()不是調用子類的display2()方法嗎?而子類有display2()方法,為什么不能
  調用呢?(我試過寫代碼了,果然如你所說是出錯的。)
  
  
  對于以上的問題,你有一段文字似乎是對其作解譯的。不過我不太清楚。不知是不是以下這
  段。
  
  
  引用原文:
  同時可能有人要問,子類中那個函數地址不是也在虛擬函數表中嗎?
  很興奮你問這樣的問題,但是父類引用看到的虛擬函數表是沒有
  那個函數項目的,因為他對于父類引用絕對是不可見。
  
  
  我現在理解是假如在子類中如對方法作了更改或新增的方法,對父類來說是不可見的?理解
  對嗎??
  */
  
  
  問題二:
  ((test)b).display();
  另一個迷感就是你說的強制轉換類型的語法到底是怎樣的??我不明白為((test)b)代表什么
 ???
  
  
  不過說回來(我怎么覺得這個例子是在說繼續??),這個例子使我對繼續有了很深的熟悉
  ,我倒是覺得對多態性還是一知半解,(別說我笨笨)可能我還沒清楚到底哪用到了多態性,
  不過請先回復了我以上兩個問題,希望你回復了我以上兩個問題(結合我研究你的代碼)使我
  對多態性有更好更深的熟悉。。
  *******************************************************************************
   網友dennisboys的提問部分結束
  *******************************************************************************
  
  
  
  *******************************************************************************
   zosatapo的解釋部分開始
  *******************************************************************************
  
  
  你真的應該謝謝我的,因為我辛辛勞苦打了篇文章,
  因為網絡原因沒有能成功保存,害了我重寫一次,
  沒有辦法,誰叫你是我的好朋友呢。
  
  
  首先謝謝你耐心看完我的文章。
  
  
  下面我就我上次寫的那篇文章和你的問題作簡單的說明但是又比較復雜的說明。
  
  
  我上次寫的那篇文章存在一處寫作錯誤,我在網上已經修正了,這里告訴你一下:
  
  
  上次的原文中有這樣的幾句話
  ****************************************
   // 下面調用會出錯的
   file://t.display2();
   file://應該象下面那樣
   ((test)b).display2();
  ******************************************
  
  
  這幾句話寫作上有錯誤:
  應該改成成下面這樣:
  
  
  **********************************************
   // 下面調用[不]會出錯的 (這里多了一個[不]字)
   file://t.display2();
  #########################################
   實際上我上面這兩行跟本文沒有關系的
   但是為了你很好的理解動態性,你可以
   把上面的代碼與下面的進行比較。
  #########################################
   file://下面這行調用不會出錯
   file://b.display2(); 這里加了一行
   file://應該象下面那樣
   ((test)b).display2();
  **********************************************‘
  
  
  
  下面正式開始我們今天的話題,正對你的問題我進行解釋,
  這里我盡可能的解釋具體一點讓你明白,實際上這里太復雜
  涉及到OOP的具體實現問題,這個問題又不得不涉及到編譯器
  問題,主要的又是對象內存布局問題。
  
  
  由于第二個問題比較簡單,我把回答問題的次序顛倒一下。
  
  
  *********
   問題二
  *********
  你說的很對,我這里解的是繼續,但是我這里解的不僅僅是繼續的
  問題??梢赃@樣是你說的繼續只是我解釋動態性問題的一個途徑和
  手段而已,因為繼續和多態性一樣是面向對象中很重要的概念,不
  是寫一點文章就可以說明白的。
  
  
  簡單一點和不精確的說,動態性與是繼續不可分割的,假如沒有繼續
  根本就談不上多態性的。所以我說你說的對,但是你沒有真正明白我
  例子的作用(55555555~~~~~~~~~~~~~我的心血呀)
  
  
  *********
   問題一
  *********
  首先需要說明的是你對這個問題的理解是不正確的。
  
  
  這個問題更是復雜的一塌糊涂,我盡量用一些不標準的詞匯來說明這個問題。
  因為這樣便于理解。我這里不解太多的理論,因為我自己現在也正在研究jvm
  規范的,因為很多東西java和c++不同,雖然兩者實現很相似。上面這點,
  我是根據我個人的一些實踐,包括理論方面和程序編寫實踐得到的。但是
  我也不敢全部拿c++的那套實現講給你聽,實際上講了你也不一定聽得懂的。
  我這里主要講一些基本的知識,你記住就可以了的,等你學習深入的時候
  我再給解釋,也許那時候你自然就懂了。
  實際上在繼續以后,子類會重新設置自己的虛擬函數表,
  這個虛擬函數表中的項目有由兩部分組成。從父類繼續的虛擬函數和子類自己
  的虛擬函數。
  
  
  記住一個很簡單又很復雜的規則,一個類型引用只能引用引用類型自身含有的
  方法和變量。你可能說這個規則不對的,因為父類引用指向子類對象的時候,
  引用是子類的方法的。我告訴你這個規則對于這樣的情況依然是成立的。放松
  你的大腦,不要想一些亂七八糟的事情,仔細聽我分析。
  
  
  對了,到這里的時候我假設你對于上面的規則除了虛擬函數調用的情況下,
  其他的靜態函數引用,以及變量引用都明白了。
  
  
  下面我們開始我們的重量級說明。虛擬函數引用。
  下面是jvm規范中關于對象內存布局的說明,我沒有翻譯
  我想你可以看明白,反正我現在看英文沒有問題,
  假如不明白就查字典。
  The Java Virtual Machine does not require any particular internal
  strUCture for objects. In Sun's current implementation of the Java
  Virtual Machine, a reference to a class instance is a pointer
  to a handle that is itself a pair of pointers: one to a table
  containing the methods of the object and a pointer to the
  Class object that rePResents the type of the object, and
  the other to the memory allocated from the Java heap for
  the object data.
  
  
  根據這里我就知道實際上jvm關于多態性支持解決方法是和c++中幾乎一樣的,
  只是c++中編譯器很多是把類型信息和虛擬函數信息都放在一個虛擬函數表中,
  但是利用某種技術來區別。
  
  
  所以當你使用父類引用指向子類的時候,其實jvm已經使用了編譯器產生的類型
  信息調整轉換了。這里你可以這樣理解,相當于把不是父類中含有的函數從虛擬
  函數表中設置為不可見的。注重有可能虛擬函數表中有些函數地址由于在子類中
  已經被改寫了,所以對象虛擬函數表中虛擬函數項目地址已經被設置為子類中完成
  的方法體的地址了。
  
  
  上面這一段就是為什么父類引用指向子類對象時候,有的方法可以調用,有的方法
  卻不能調用。
  
  
  虛擬函數調用是經過虛擬函數表間接調用的,所以才得以實現多態的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品99久久久久| 亚洲三级免费看| 亚洲精品资源美女情侣酒店| 亚洲成人激情在线| 欧美精品videossex性护士| 日韩欧美在线一区| 国产精品丝袜一区二区三区| 精品亚洲男同gayvideo网站| 国产精品久久久久久搜索| 久青草国产97香蕉在线视频| 中日韩美女免费视频网站在线观看| 91免费电影网站| 亚洲美女激情视频| 亚洲自拍中文字幕| 久久五月天综合| 欧美日韩国产精品一区| 亚州国产精品久久久| 欧美中文在线观看| 国产中文字幕日韩| 亚洲第一天堂av| 91色在线观看| 欧美日韩国产中文字幕| 欧美一级免费视频| 欧美疯狂做受xxxx高潮| 亚洲欧美国产制服动漫| 2019最新中文字幕| 91久久精品国产| 亚洲成人国产精品| 国内精品小视频在线观看| 4p变态网欧美系列| 国产自产女人91一区在线观看| 欧美日韩亚洲一区二区三区| 国产aaa精品| 欧美成人午夜激情视频| 国产亚洲美女精品久久久| 奇米影视亚洲狠狠色| 国产午夜精品一区二区三区| 日韩精品在线观看一区| 日韩av资源在线播放| 国产一区二区欧美日韩| 日韩欧美极品在线观看| 久久久国产精品一区| 欧美日韩国产二区| 日韩成人xxxx| 亚洲国产精彩中文乱码av| 国产成人av在线| 国产欧美精品va在线观看| 亚洲字幕一区二区| 日韩精品丝袜在线| 亚洲美女福利视频网站| 中文字幕亚洲激情| 亚洲剧情一区二区| 91色在线视频| 国产97在线观看| 国产人妖伪娘一区91| 不卡av在线网站| 亚洲a成v人在线观看| 欧美激情一区二区三区在线视频观看| 国产成人啪精品视频免费网| 日韩一区二区av| 91免费综合在线| 91精品视频免费观看| 欧美乱大交做爰xxxⅹ性3| 国产日韩视频在线观看| 亚洲第一av网| 中文字幕国产日韩| 91精品国产综合久久香蕉的用户体验| 欧美与欧洲交xxxx免费观看| 欧美理论电影在线观看| 日韩精品在线第一页| 欧美性在线观看| 亚洲欧美中文日韩v在线观看| 久久久综合免费视频| 成人欧美一区二区三区黑人| 国产一区二区三区三区在线观看| 国产精品久久久久久久久久久久久久| 国产精品白丝av嫩草影院| 美日韩精品免费视频| 欧美在线视频网站| 亚洲色图美腿丝袜| 性金发美女69hd大尺寸| 精品国产乱码久久久久久天美| 国产精自产拍久久久久久蜜| 国产欧亚日韩视频| 波霸ol色综合久久| 国产手机视频精品| 超碰91人人草人人干| 91av在线影院| 日韩网站免费观看| 538国产精品视频一区二区| 欧美乱大交做爰xxxⅹ性3| 最近2019年日本中文免费字幕| 日韩在线视频中文字幕| 国产www精品| 国产精品一久久香蕉国产线看观看| 国产精品男人爽免费视频1| 色综合老司机第九色激情| 久久成人18免费网站| 日韩精品亚洲精品| 国产精品私拍pans大尺度在线| 国产精品自拍视频| 日韩av中文字幕在线免费观看| 久久不射热爱视频精品| 最新国产精品拍自在线播放| 亚洲欧洲午夜一线一品| 欧美电影免费观看大全| 91美女福利视频高清| 姬川优奈aav一区二区| 中文字幕久热精品视频在线| 日韩不卡中文字幕| 免费91麻豆精品国产自产在线观看| 日韩免费看的电影电视剧大全| 欧美日本中文字幕| 欧美激情一区二区三区久久久| 欧美激情亚洲一区| 欧美日韩国产精品一区二区三区四区| 国产亚洲精品久久久久久777| 国产日韩换脸av一区在线观看| 成人观看高清在线观看免费| 欧美黑人极品猛少妇色xxxxx| 欧美中文字幕第一页| 在线播放日韩专区| 77777亚洲午夜久久多人| 国产一区二区三区在线免费观看| 日韩精品久久久久| 久久精品亚洲94久久精品| 日韩在线一区二区三区免费视频| 韩国三级日本三级少妇99| 欧美日韩免费区域视频在线观看| 在线观看欧美日韩国产| 91产国在线观看动作片喷水| 国产成人精品视| 日韩电影在线观看免费| 久久人体大胆视频| 国内精品免费午夜毛片| 中文字幕日韩精品在线观看| 疯狂蹂躏欧美一区二区精品| 欧美国产精品日韩| 国产亚洲一区二区精品| 国产午夜精品一区理论片飘花| 国产精品www网站| 国产成人小视频在线观看| 国产一区二区三区久久精品| 精品少妇一区二区30p| 国产成人高清激情视频在线观看| 免费av在线一区| 日韩毛片在线看| 亚洲日本中文字幕免费在线不卡| 国产精品自产拍高潮在线观看| 久久精品这里热有精品| 97在线免费观看视频| 欧美性开放视频| 国产suv精品一区二区| 欧美裸体男粗大视频在线观看| 久久福利视频网| 久久精品这里热有精品| 久久午夜a级毛片| 中文字幕日韩在线视频| 亚洲毛片一区二区| 国产精品揄拍500视频| 91wwwcom在线观看| 国产午夜精品麻豆| 岛国av一区二区三区| 在线播放日韩精品|