• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            chenglong7997

            java重寫方法的原則

             若想實(shí)現(xiàn)一個(gè)合格重寫方法,而不是重載,那么必須同時(shí)滿足下面的要求! 

            A、重寫規(guī)則之一:
                重寫方法不能比被重寫方法限制有更嚴(yán)格的訪問級(jí)別。 
            (但是可以更廣泛,比如父類方法是包訪問權(quán)限,子類的重寫方法是public訪問權(quán)限。) 比如:Object類有個(gè)toString()方法,開始重寫這個(gè)方法的時(shí)候我們總?cè)菀淄沺ublic修飾符,編譯器當(dāng)然不會(huì)放過任何教訓(xùn)我們 的機(jī)會(huì)。出錯(cuò)的原因就是:沒有加任何訪問修飾符的方法具有包訪問權(quán)限,包訪問權(quán)限比public當(dāng)然要嚴(yán)格了,所以編譯器會(huì)報(bào)錯(cuò)的。 

            B、重寫規(guī)則之二
               參數(shù)列表必須與被重寫方法的相同。 
            重寫有個(gè)孿生的弟弟叫重載,也就是后面要出場(chǎng)的。如果子類方法的參數(shù)與父類對(duì)應(yīng)的方法不同,那么就是你認(rèn)錯(cuò)人了,那是重載,不是重寫。 

            C、重寫規(guī)則之三:
               返回類型必須與被重寫方法的返回類型相同。
            父類方法A:void eat(){} 子類方法B:int eat(){} 兩者雖然參數(shù)相同,可是返回類型不同,所以不是重寫。
            父類方法A:int eat(){} 子類方法B:long eat(){} 返回類型雖然兼容父類,但是不同就是不同,所以不是重寫。

            D、重寫規(guī)則之四:
               重寫方法不能拋出新的異?;蛘弑缺恢貙懛椒暶鞯臋z查異常更廣的檢查異常。但是可以拋出更少,更有限或者不拋出異常。
            import java.io.*;
            public class Test {
              public static void main (String[] args) {
               Animal h = new Horse();
               try {
                 h.eat(); 
               }
               catch (Exception e) {
               }
             }
            }

            class Animal {
              public void eat() throws Exception{
               System.out.println ("Animal is eating.");
               throw new Exception();
              }
            }

            class Horse extends Animal{
               public void eat() throws IOException{
                System.out.println ("Horse is eating.");
                throw new IOException();
              }
            }

            這個(gè)例子中,父類拋出了檢查異常Exception,子類拋出的IOException是Exception的子類,也即是比被重寫的方法拋出了更有限的異常,這是可以的。如果反過來,父類拋出IOException,子類拋出更為寬泛的Exception,那么不會(huì)通過編譯的。
            注意:這種限制只是針對(duì)檢查異常,至于運(yùn)行時(shí)異常RuntimeException及其子類不再這個(gè)限制之中。

            E、重寫規(guī)則之五:
               不能重寫被標(biāo)識(shí)為final的方法。

            F、重寫規(guī)則之六:
              如果一個(gè)方法不能被繼承,則不能重寫它。
            比較典型的就是父類的private方法。下例會(huì)產(chǎn)生一個(gè)有趣的現(xiàn)象。
            public class Test {
              public static void main (String[] args) {
               //Animal h = new Horse();
               Horse h = new Horse();
                h.eat();
               }
            }

            class Animal {
               private void eat(){
                System.out.println ("Animal is eating.");
                }
             }

            class Horse extends Animal{
               public void eat(){
                 System.out.println ("Horse is eating.");
               }
            }
            這段代碼是能通過編譯的。表面上看來違反了第六條規(guī)則,但實(shí)際上那是一點(diǎn)巧合。Animal類的eat()方法不能被繼承,因此Horse類中的 eat()方法是一個(gè)全新的方法,不是重寫也不是重載,只是一個(gè)只屬于Horse類的全新的方法!這點(diǎn)讓很多人迷惑了,但是也不是那么難以理解。
            main()方法如果是這樣:
            Animal h = new Horse();
            //Horse h = new Horse();
            h.eat();
            編譯器會(huì)報(bào)錯(cuò),為什么呢?Horse類的eat()方法是public的??!應(yīng)該可以調(diào)用啊!請(qǐng)牢記,多態(tài)只看父類引用的方法,而不看子類對(duì)象的方法!

            posted on 2012-04-11 13:55 Snape 閱讀(4865) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Java

            導(dǎo)航

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            my

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久久久18| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 亚洲国产高清精品线久久| 久久精品国产精品亚洲艾草网美妙| 曰曰摸天天摸人人看久久久| 久久久久黑人强伦姧人妻| 久久这里只有精品首页| 色欲综合久久中文字幕网 | 久久夜色撩人精品国产| 一本久道久久综合狠狠爱| 91亚洲国产成人久久精品| 亚洲精品乱码久久久久久| 99热成人精品免费久久| 久久亚洲国产精品成人AV秋霞| 亚洲国产成人精品91久久久| 亚洲Av无码国产情品久久| 国产69精品久久久久777| 亚洲精品国产第一综合99久久 | 国产免费久久精品99re丫y| 色综合久久久久网| 中文字幕人妻色偷偷久久| 精品熟女少妇aⅴ免费久久| 久久棈精品久久久久久噜噜| 无码8090精品久久一区| 久久免费精品一区二区| 久久亚洲精品人成综合网| 久久夜色撩人精品国产| 久久久久国产| 精品无码久久久久久久动漫| 色综合久久综精品| 国产精品久久自在自线观看| 无码人妻少妇久久中文字幕蜜桃 | 久久久久久久综合日本| 久久久国产精品网站| 久久天堂AV综合合色蜜桃网 | 久久99九九国产免费看小说| 久久被窝电影亚洲爽爽爽| 综合久久一区二区三区 | 国产精品久久久久影院嫩草| 久久久无码精品亚洲日韩按摩| 久久久亚洲欧洲日产国码是AV|