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

          對于標(biāo)準(zhǔn)的多態(tài)示例程序
          Class A {
          public void test(){
          System.out.println("A");
          }
          }
          Public Class B extends A{
          //@override 有無都不會報錯
          public void test(){
          System.out.println("B");
          }
          public static void main(String[] arguments){
              A a=new B();
              a.test();
          }
          }
          /*output:
          B
          *///:~
          這個程序很好的示意了向上轉(zhuǎn)型后A對B實(shí)例的test的調(diào)用。
          然而并不是所有的類型的方法都能夠支持多態(tài)。對于是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*/
          //:~
          這個結(jié)論是,a.test()調(diào)用的是A類的方法test。因?yàn)锽中的test方法并不是覆蓋了A類的方法。因此,A調(diào)用的只是他自身的test方法。大家注意的是,盡量不要在子類中聲明和父類私有方法相同名稱的方法。

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

          評論

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

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

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

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

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

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

          # re: java 多態(tài)產(chǎ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的方法被自動認(rèn)為是final的且不能被訪問。
          public void test(){
          System.out.println("B");
          }

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

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

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

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

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

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

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


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


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

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高安市| 肃宁县| 宝应县| 渝中区| 松原市| 吉安市| 抚州市| 镇远县| 成都市| 通州市| 女性| 湟源县| 迁西县| 平阳县| 昭通市| 富蕴县| 城步| 湟源县| 佛教| 津南区| 体育| 禄丰县| 延长县| 左贡县| 金乡县| 潍坊市| 大城县| 民和| 永福县| 大冶市| 通榆县| 都匀市| 房山区| 武冈市| 斗六市| 平果县| 贵州省| 河西区| 玉山县| 华蓥市| 台南市|