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

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

構建器內部的多形性方法的行為

2019-11-18 13:21:51
字體:
來源:轉載
供稿:網友

  構建器調用的分級結構(順序)為我們帶來了一個有趣的問題,或者說讓我們進入了一種進退兩難的局面。若當前位于一個構建器的內部,同時調用預備構建的那個對象的一個動態綁定方法,那么會出現什么情況呢?在原始的方法內部,我們完全可以想象會發生什么——動態綁定的調用會在運行期間進行解析,因為對象不知道它到底從屬于方法所在的那個類,還是從屬于從它衍生出來的某些類。為保持一致性,大家也許會認為這應該在構建器內部發生。
  
  但實際情況并非完全如此。若調用構建器內部一個動態綁定的方法,會使用那個方法被覆蓋的定義。然而,產生的效果可能并不如我們所愿,而且可能造成一些難于發現的程序錯誤。
  
  從概念上講,構建器的職責是讓對象實際進入存在狀態。在任何構建器內部,整個對象可能只是得到部分組織——我們只知道基礎類對象已得到初始化,但卻不知道哪些類已經繼續。然而,一個動態綁定的方法調用卻會在分級結構里“向前”或者“向外”前進。它調用位于衍生類里的一個方法。假如在構建器內部做這件事情,那么對于調用的方法,它要操縱的成員可能尚未得到正確的初始化——這顯然不是我們所希望的。
  
  通過觀察下面這個例子,這個問題便會昭然若揭:
  
  //: PolyConstrUCtors.java
  // Constructors and polymorphism
  // don't PRoduce what you might eXPect.
  
  abstract class Glyph {
   abstract void draw();
   Glyph() {
    System.out.println("Glyph() before draw()");
    draw();
    System.out.println("Glyph() after draw()");
   }
  }
  
  class RoundGlyph extends Glyph {
   int radius = 1;
   RoundGlyph(int r) {
    radius = r;
    System.out.println(
     "RoundGlyph.RoundGlyph(), radius = "
     + radius);
   }
   void draw() {
    System.out.println(
     "RoundGlyph.draw(), radius = " + radius);
   }
  }
  
  public class PolyConstructors {
   public static void main(String[] args) {
    new RoundGlyph(5);
   }
  } ///:~
  
  在Glyph中,draw()方法是“抽象的”(abstract),所以它可以被其他方法覆蓋。事實上,我們在RoundGlyph中不得不對其進行覆蓋。但Glyph構建器會調用這個方法,而且調用會在RoundGlyph.draw()中止,這看起來似乎是有意的。但請看看輸出結果:
  
  Glyph() before draw()
  RoundGlyph.draw(), radius = 0
  Glyph() after draw()
  RoundGlyph.RoundGlyph(), radius = 5
  
  當Glyph的構建器調用draw()時,radius的值甚至不是默認的初始值1,而是0。這可能是由于一個點號或者屏幕上根本什么都沒有畫而造成的。這樣就不得不開始查找程序中的錯誤,試著找出程序不能工作的原因。
  
  前一節講述的初始化順序并不十分完整,而那是解決問題的要害所在。初始化的實際過程是這樣的:
  
  (1) 在采取其他任何操作之前,為對象分配的存儲空間初始化成二進制零。
  
  (2) 就象前面敘述的那樣,調用基礎類構建器。此時,被覆蓋的draw()方法會得到調用(的確是在RoundGlyph構建器調用之前),此時會發現radius的值為0,這是由于步驟(1)造成的。
  
  (3) 按照原先聲明的順序調用成員初始化代碼。
  
  (4) 調用衍生類構建器的主體。
  
  采取這些操作要求有一個前提,那就是所有東西都至少要初始化成零(或者某些非凡數據類型與“零”等價的值),而不是僅僅留作垃圾。其中包括通過“合成”技術嵌入一個類內部的對象句柄。假如假若忘記初始化那個句柄,就會在運行期間出現違例事件。其他所有東西都會變成零,這在觀看結果時通常是一個嚴重的警告信號。
  
  在另一方面,應對這個程序的結果提高警惕。從邏輯的角度說,我們似乎已進行了無懈可擊的設計,所以它的錯誤行為令人非常不可思議。而且沒有從編譯器那里收到任何報錯信息(C++在這種情況下會表現出更合理的行為)。象這樣的錯誤會很輕易地被人忽略,而且要花很長的時間才能找出。
  
  因此,設計構建器時一個非凡有效的規則是:用盡可能簡單的方法使對象進入就緒狀態;假如可能,避免調用任何方法。在構建器內唯一能夠安全調用的是在基礎類中具有final屬性的那些方法(也適用于private方法,它們自動具有final屬性)。這些方法不能被覆蓋,所以不會出現上述潛在的問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性极品少妇精品网站| 欧美疯狂性受xxxxx另类| 欧美激情视频在线免费观看 欧美视频免费一| 久久久久久九九九| 久久影视电视剧免费网站清宫辞电视| 国产suv精品一区二区三区88区| 欧美裸体男粗大视频在线观看| 精品国产乱码久久久久酒店| 久久亚洲精品中文字幕冲田杏梨| 中文字幕精品一区久久久久| 少妇高潮久久久久久潘金莲| 欧美日韩在线视频一区| 午夜精品视频网站| 亚洲毛片在线观看| 久久久99久久精品女同性| 久久久久久免费精品| 在线日韩中文字幕| 欧美极品少妇全裸体| 欧美一级淫片aaaaaaa视频| 欧美电影免费看| 国产精品偷伦免费视频观看的| 狠狠躁夜夜躁人人躁婷婷91| 97久久精品在线| 亚洲成色www8888| www国产精品视频| 欧美日韩一区二区在线| xxx成人少妇69| 日韩av在线精品| 欧美日韩在线视频首页| 一区二区三区无码高清视频| 久久久久久久久久亚洲| 欧美丝袜第一区| 日韩免费在线播放| 欧美高清视频在线观看| 久久久久久久久久久久久久久久久久av| 欧美极品美女电影一区| 亚洲成人久久久久| 91香蕉亚洲精品| 91中文在线视频| 日韩av网站大全| 波霸ol色综合久久| 全色精品综合影院| 亚洲欧美一区二区激情| 欧美性猛交xxxx免费看漫画| 国产精品高潮呻吟久久av黑人| 国产精品69久久久久| 亚洲色在线视频| 亚洲一区二区三区sesese| 国产在线精品一区免费香蕉| 97视频在线免费观看| 久久久久久久久久国产| 欧美性猛交xxxx免费看| 中文字幕久久亚洲| 欧美在线视频观看免费网站| 欧美孕妇毛茸茸xxxx| 欧美午夜美女看片| 永久免费精品影视网站| 欧美国产在线视频| 精品偷拍各种wc美女嘘嘘| 精品亚洲一区二区三区| 国产精品第一页在线| 久久久久久久激情视频| 精品中文字幕在线| 91精品免费视频| 91精品久久久久久综合乱菊| 欧美日韩国产成人高清视频| 欧美在线视频导航| 久久久97精品| 91亚洲精品在线观看| 久久精品久久久久久国产 免费| 91人人爽人人爽人人精88v| 俺去啦;欧美日韩| 91九色在线视频| 精品性高朝久久久久久久| 国产69精品久久久| 欧美激情综合色综合啪啪五月| 久久躁狠狠躁夜夜爽| 92看片淫黄大片看国产片| 91精品国产乱码久久久久久蜜臀| 97国产在线观看| 91老司机在线| 国产精品高潮呻吟久久av黑人| 黄色成人在线免费| 午夜精品蜜臀一区二区三区免费| 久久久久久一区二区三区| 揄拍成人国产精品视频| 国产精品www色诱视频| 日韩成人在线播放| 日韩精品在线私人| 欧日韩不卡在线视频| 精品国产91久久久久久老师| 日本最新高清不卡中文字幕| 日本道色综合久久影院| 日韩在线中文视频| 国产精品揄拍一区二区| 亚洲视频专区在线| 日韩精品在线观看一区| 欧美大尺度在线观看| 日本91av在线播放| 欧美在线视频免费| 欧美日韩精品在线视频| 91国内揄拍国内精品对白| 欧美肥臀大乳一区二区免费视频| 国产精品国产自产拍高清av水多| 欧美成人黑人xx视频免费观看| 欧美肥臀大乳一区二区免费视频| www亚洲欧美| 国产精品久久久久影院日本| 国产亚洲视频中文字幕视频| 国产精品视频导航| 丝袜一区二区三区| 欧美日韩性视频在线| 精品亚洲国产成av人片传媒| 久久成人18免费网站| 中文字幕亚洲无线码在线一区| 疯狂做受xxxx高潮欧美日本| 尤物九九久久国产精品的分类| 国产一区二区在线免费视频| 国产精品高潮呻吟视频| 狠狠久久亚洲欧美专区| 亚洲国产精品电影在线观看| 日韩av电影院| 日韩国产精品亚洲а∨天堂免| 午夜精品久久久久久久99热| 久久久www成人免费精品张筱雨| 国产日本欧美一区二区三区在线| 欧美精品在线免费播放| 欧美日韩精品国产| www.午夜精品| 亚洲精品免费在线视频| 免费99精品国产自在在线| 国产深夜精品福利| 在线国产精品播放| 国产精品91在线| 国产成人拍精品视频午夜网站| 欧美高清视频在线观看| 亚洲精品福利在线| 91久久久在线| 亚洲性无码av在线| 成人97在线观看视频| 久久精品国产91精品亚洲| 欧美国产日产韩国视频| 国内伊人久久久久久网站视频| 亚洲国产精品悠悠久久琪琪| 久久久久久成人| 久久亚洲国产成人| 97免费视频在线播放| 这里只有精品在线观看| 亚洲欧美日韩中文在线| 国产成人精品免高潮在线观看| 在线a欧美视频| 欧美区在线播放| 亚洲一区二区三区乱码aⅴ| 亚洲女人天堂成人av在线| 国产suv精品一区二区三区88区| 国产精品美女免费视频| 国产精品中文久久久久久久| 91人人爽人人爽人人精88v| 伊人久久综合97精品| 国产日韩精品综合网站| 欧美激情亚洲国产| 亚洲午夜女主播在线直播| 黑人与娇小精品av专区| 国产精品视频精品|