編程生活

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            113 隨筆 :: 0 文章 :: 18 評(píng)論 :: 0 Trackbacks

          如下代碼會(huì)出問題
          public class C {
              private String c1;

              private String c2;

              public void setC1(String c1) {
                  this.c1 = c1;
              }

             public String getC1() {
                  return this.c1;
              }

              public void setC2(String c2) {
                  this.c2 = c2;
              }

             public String getC2() {
                  return this.c2;
              }
          }

          public abstract class A extends Composite {
              public A(Composite parent, int style) {
                  super(parent, style);
                  createMainBody(parent);
                  createOtherBox();
              }
              
              protected abstract void createMainBody(Composite parent);
              protected abstract void createOtherBox(Composite parent);
          }

          public class B extends A{
              private Text b1 = null; //VE生成的
              ...
              private C c = new C();

              public B(Composite parent, int style) {
                  super(parent, style);
              }
              
              protected void createMainBody(Composite parent) {
                  b1 = new Text(parent, SWT.NONE);
                  b1.addModifyListener(new ModifyListener() {
                      public void modifyText(ModifyEvent e) {
                          c.setC1(b1.getText());
                          fireFormDataChange();
                      }
                  });
                  b1.setText("Hello...");
                  ...
              }
              ...
          }
          一運(yùn)行代碼出錯(cuò)了,經(jīng)過調(diào)試才發(fā)現(xiàn)B初始化時(shí),在super(..)執(zhí)行完之前并沒有初始化本類(這是對(duì)的),自己的代碼實(shí)現(xiàn)有問題.
          注意:類初始化時(shí),首先初始化父類,再初始化本類的變量聲明部分,初始化父類時(shí)如果回調(diào)到子類的某些類的實(shí)現(xiàn),而這些實(shí)現(xiàn)方法又完成了對(duì)聲明變量的創(chuàng)建,再回來初始化本類時(shí),如果聲明變量有初始值,又會(huì)將這些變量設(shè)置到初始值狀態(tài),因此,會(huì)發(fā)現(xiàn)這些變量無法訪問了.一切都是對(duì)的,只是自己太相信VE生成的代碼了.
          改動(dòng)很簡(jiǎn)單,只是將
          public class B extend   A { 
              private Text b1;    
              ...
              private C c;

              public B(Composite parent, int style) {
                  super(parent, style);
              }
              
              protected void createMainBody(Composite parent) {
                  c = new C();
                  ...
              }
          }
          好,這樣就一切OK.類的初始化過程的學(xué)習(xí)還是很重要的.

          posted on 2007-11-06 09:09 wilesun 閱讀(638) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 乐山市| 潍坊市| 游戏| 绥芬河市| 北宁市| 周宁县| 镇江市| 车险| 伽师县| 大悟县| 乌鲁木齐县| 河南省| 兖州市| 来凤县| 江达县| 时尚| 石阡县| 吉林省| 丹东市| 临沂市| 新昌县| 聂拉木县| 贺州市| 桐城市| 西畴县| 嘉鱼县| 晋中市| 新田县| 康马县| 伊吾县| 通河县| 长沙市| 通江县| 日土县| 万山特区| 敦煌市| 色达县| 武冈市| 龙井市| 凉城县| 保定市|