3278 7840

          1100111010001110 1001010010001010

          打破封裝的種類之一 :繼承

          一、繼承可以打破父類原有的封裝

          class Body
          {   String name;
              public Body(String name)
              {this.name=name;}
          }
          class ChildBody extends Body
          {
          private int age;
          }
          public class Test
          { public static void main(String[] args)
              {
                 Body Tom=new ChildBody();
              }
          }

          看看這段代碼,有沒有問題呢?能不能通過編譯呢?

           

          父類,沒有錯(cuò)誤。子類繼承了父類,并添加了私有成員變量age

           

          看似沒有錯(cuò)誤。

           

          編譯錯(cuò)誤,沒有找到0參數(shù)的構(gòu)造函數(shù)Body()

           

          這是為什么呢? 咱們沒有調(diào)用Body()呀

           

          只是直接調(diào)用的ChildBody()構(gòu)造函數(shù),而這個(gè)應(yīng)該是由編譯器提供的呀?

           

          為什么這次它沒有提供呢?傻了嗎?

           

          可是

           

          究竟為什么呢?困惑中

           

          其實(shí) ,事實(shí)不像看到的那樣

           

          1 類如果沒構(gòu)造方法,編譯器會(huì)嘗試給創(chuàng)建一個(gè)默認(rèn)的


          2 但是子類構(gòu)造方法要用父類的構(gòu)造方法來初始化其父類的東西


          3 這時(shí)候,編譯器就疑惑了,不能幫你合成了

          需要你顯示的來寫構(gòu)造方法

          所以看出一個(gè)問題:


          繼承雖然提高代碼復(fù)用,但是子類的編寫者需要了解父類的設(shè)計(jì)細(xì)節(jié),因此,繼承某種程度上

           

          打破了封裝

          我們對(duì)子類做一下修改,

          class ChildBody extends Body
          {
          private int age;

          public ChildBody(String name){

          super(name);

          }
          }

          而現(xiàn)在就應(yīng)該可以通過編譯了

          我的分析是

          我們用了super()句子,就是調(diào)用了父類的構(gòu)造方法

          而父類的此構(gòu)造方法,則要調(diào)用它自己的父類無參構(gòu)造函數(shù)

          大家知道類Body 隱式的繼承于Object

          也就是說,調(diào)用了Object的無參構(gòu)造函數(shù)

          自然是可以成功編譯了

          posted on 2009-06-15 16:06 逍遙晨空 閱讀(221) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宝山区| 阳新县| 天水市| 澄江县| 元氏县| 哈尔滨市| 德昌县| 夏邑县| 郎溪县| 闵行区| 庆安县| 永寿县| 张家界市| 会昌县| 沙河市| 蒙山县| 中牟县| 苗栗县| 荣成市| 凤庆县| 肇州县| 崇阳县| 清苑县| 十堰市| 理塘县| 普洱| 肃宁县| 龙岩市| 田林县| 夹江县| 榕江县| 仪陇县| 宣威市| 南充市| 沾益县| 东乡县| 杭州市| 西城区| 个旧市| 林甸县| 青龙|