java 多態(tài)產(chǎn)生的疑問(wèn)

          對(duì)于標(biāo)準(zhǔn)的多態(tài)示例程序
          Class A {
          public void test(){
          System.out.println("A");
          }
          }
          Public Class B extends A{
          //@override 有無(wú)都不會(huì)報(bào)錯(cuò)
          public void test(){
          System.out.println("B");
          }
          public static void main(String[] arguments){
              A a=new B();
              a.test();
          }
          }
          /*output:
          B
          *///:~
          這個(gè)程序很好的示意了向上轉(zhuǎn)型后A對(duì)B實(shí)例的test的調(diào)用。
          然而并不是所有的類型的方法都能夠支持多態(tài)。對(duì)于是private的方法,我們應(yīng)該格外注意。
           1

          package cn.edu.neu.deepweb407.gui;

          public class A {
          private  void test(){
           System.out.println("A");
          }

          public static void main(String[] arg1s) {
           A a=new B();
           a.test();
          }
          }
          class B extends A{
           public void test(){
            System.out.println("B");
           }
          }

          16/*output:
          17A
          18*/
          //:~
          這個(gè)結(jié)論是,a.test()調(diào)用的是A類的方法test。因?yàn)锽中的test方法并不是覆蓋了A類的方法。因此,A調(diào)用的只是他自身的test方法。大家注意的是,盡量不要在子類中聲明和父類私有方法相同名稱的方法。

          posted on 2012-07-10 17:27 scorpio小蝎 閱讀(409) 評(píng)論(7)  編輯  收藏

          評(píng)論

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 09:06 rubyliu12

          你這個(gè)也太扯淡了吧
          你代碼里B有繼承A嗎?沒繼承的話A a=new B();這樣編譯能通過(guò)?
          最后A類是私有的test的方法的話
          A a=new B();
          a.test();可以這么寫?不知道樓主是這么編譯和運(yùn)行及得出的結(jié)論。看樓主的其他文章感覺也不是剛出道的菜鳥啊。
            回復(fù)  更多評(píng)論   

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 09:43 scorpio小蝎

          @rubyliu12
          謝謝指正,代碼貼錯(cuò)了,已修改。   回復(fù)  更多評(píng)論   

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 09:56 scorpio小蝎

          @rubyliu12
          A類中 private test() 的方法由于main方法是在A類中 所以可以調(diào)用。這只是個(gè)demo。其實(shí)際意義是,如果A類中public方法調(diào)用了A類的private方法,而由于子類重寫了A類的private方法,將會(huì)出現(xiàn)如題所述的問(wèn)題。有問(wèn)題歡迎指教   回復(fù)  更多評(píng)論   

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 09:59 scorpio小蝎

          class A {
          private void test(){
          System.out.println("A");
          }
          public void get(){
          test();
          }
          }
          public class B extends A{
          //@override 不能有,因?yàn)閜rivate的方法被自動(dòng)認(rèn)為是final的且不能被訪問(wèn)。
          public void test(){
          System.out.println("B");
          }

          public static void main(String[] args) {
          A a=new B();
          a.get();
          }
          }  回復(fù)  更多評(píng)論   

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 10:00 rubyliu12

          而由于子類重寫了A類的private方法?
          private的方法是私有的存在被子類重寫這樣的說(shuō)話。  回復(fù)  更多評(píng)論   

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 10:08 scorpio小蝎

          @rubyliu12
          按照概念來(lái)講,不能叫做重寫,因該叫做子類新增了方法,但是形式上以及方法名是一模一樣的,很多新人都不會(huì)注意這點(diǎn),為了區(qū)分才提出的。  回復(fù)  更多評(píng)論   

          # re: java 多態(tài)產(chǎn)生的疑問(wèn) 2012-07-11 10:09 scorpio小蝎

          @rubyliu12 這句話里有提到,并不是真正意義的覆蓋“這個(gè)結(jié)論是,a.test()調(diào)用的是A類的方法test。因?yàn)锽中的test方法并不是覆蓋了A類的方法。因此,A調(diào)用的只是他自身的test方法。大家注意的是,盡量不要在子類中聲明和父類私有方法相同名稱的方法。”不過(guò)你這個(gè)問(wèn)題提的很不錯(cuò),這樣子大家看得更清楚了
            回復(fù)  更多評(píng)論   


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


          網(wǎng)站導(dǎo)航:
           
          <2012年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 安图县| 金阳县| 阿拉善盟| 五家渠市| 高雄县| 富顺县| 铜山县| 南漳县| 广西| 白山市| 佛山市| 沾益县| 龙游县| 静安区| 金门县| 苍南县| 龙江县| 集安市| 大埔区| 岳阳市| 武汉市| 肇州县| 绥江县| 六安市| 吴堡县| 汝南县| 出国| 咸丰县| 巴彦淖尔市| 汤阴县| 瑞安市| 青川县| 台北市| 亳州市| 新邵县| 通山县| 井研县| 泾阳县| 盐源县| 上思县| 神木县|