<p>重寫方法的規則以下:</p> <p>1. 參數列表:必須與被重寫方法的參數列表徹底匹配。 <br />2. 返回類型:必須與超類中被重寫的方法中聲明的返回類型或子類型徹底相同 <br />3. 訪問級別:必定不能比被重寫方法強,能夠比被重寫方法的弱。 <br />4. 非檢查異常:重寫方法能夠拋出任何非檢查的異常,不管被重寫方法是否聲明瞭該異常。 <br />5. 檢查異常:重寫方法必定不能拋出新的檢查異常,或比被重寫方法聲明的檢查異常更廣的檢查異常 <br />6. 不能重寫標誌爲final,static的方法 <br />重載方法的規則: <br />1. 參數列表:被重載的方法必須改變參數列表。 <br />2. 返回類型:能夠改變返回類型。 <br />3. 修飾符:能夠改變修飾符 <br />4. 異常:能夠聲明新的或者更普遍的異常。</p> <ol> <li><strong>class</strong> Animal {   </li> <li><strong>public</strong> <strong>void</strong> eat(){   </li> <li>    }   </li> <li>}  </li> </ol> <p>如下列出對於Animal的eat方法各類重寫重載實例,根據以上列出的規則,判斷其是否合法(如下的方法都屬於Animal的子類Horse的方法): <br />1. private void eat(){}  不能經過編譯,非法重寫,訪問修飾符限制性變強;不屬於重載,由於參數列表沒有發生改變 <br />2. public void eat() throw RuntimeException{}  能經過編譯,屬於重寫,重寫方法能夠拋出任何非檢查異常。 <br />3. public void eat() throw IOException{}  不能經過編譯,非法重寫,重寫方法必定不能拋出新的檢查異常,或比被重寫方法聲明的檢查異常更廣的檢查異常;不屬於重載,參數列表必須發生變化才屬於重載 <br />4. public void eat(String food){}  能經過編譯,不是重寫;合法重載,由於參數列表發生改變了。 <br />5. public String eat(){}  不能經過編譯,不是重寫,由於其返回類型;不是重載,由於參數列表沒有發生改變。 <br />6. public String eat(int n){} 能夠經過編譯,不是重寫;是重載,首先參數列表必須發生變化,返回類型能夠發生改變。</p> <p>對父類被重寫的方法作一個變更:</p> <ol> <li><strong>class</strong> Animal {   </li> <li><strong>public</strong> Animal eat() <strong>throws</strong> IOException{   </li> <li><strong>return</strong> <strong>null</strong>;   </li> <li>    }   </li> <li>}  </li> </ol> <p>7.  public Animal eat(){return null;}  能夠經過編譯,合法重寫,能夠不拋出異常,只要不拋出新的異常或更普遍的異常就能夠。 <br />8.  public Animal eat() throws FileNotFoundException{return null;} 能夠經過編譯,是重寫,屬於子類的非檢查異常。 <br />9.  public Animal eat() throws Exception{}  不能夠經過編譯,非法重寫,拋出了更普遍的異常。 <br />10.  public Horse eat() {} 能夠經過編譯,是重寫,由於返回類型能夠是被重寫的返回類型的子類。</p> <p>1           重載(Overloading) <br />(1)       方法重載是讓類以統一的方式處理不一樣類型數據的一種手段。多個同名函數同時 <br />存在,具備不一樣的參數個數/類型。重載Overloading是一個類中多態性的一種表現。 <br />(2)       Java的方法重載,就是在類中能夠建立多個方法,它們具備相同的名字,但具 <br />有不一樣的參數和不一樣的定義。調用方法時經過傳遞給它們的不一樣參數個數和參數類型 <br />來決定具體使用哪一個方法, 這就是多態性。 <br />(3)       重載的時候,方法名要同樣,可是參數類型和個數不同,返回值類型能夠相同 <br />也能夠不相同。沒法以返回型別做爲重載函數的區分標準。</p> <p>2     重寫(Overriding) <br />(1)    父類與子類之間的多態性,對父類的函數進行從新定義。若是在子類中定義某 <br />方法與其父類有相同的名稱和參數,咱們說該方法被重寫 (Overriding)。在Java中, <br />子類可繼承父類中的方法,而不須要從新編寫相同的方法。但有時子類並不想原封不 <br />動地繼承父類的方法,而是想做必定的修改,這就須要採用方法的重寫。方法重寫又 <br />稱方法覆蓋。 <br />(2)    若子類中的方法與父類中的某一方法具備相同的方法名、返回類型和參數表, <br />則新方法將覆蓋原有的方法。如需父類中原有的方法,可以使用super關鍵字,該關鍵 <br />字引用了當前類的父類。 <br />(3)    子類函數的訪問修飾權限不能少於父類的;</p> <p>總結:重載和重寫(覆蓋)。  <br />方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫 <br />Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性 <br />的一種表現。若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法 <br />被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而 <br />言,父類中的定義如同被「屏蔽」了,並且若是子類的方法名和參數類型和個數都和 <br />父類相同,那麼子類的返回值類型必須和父類的相同;若是在一個類中定義了多個同 <br />名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載 <br />(Overloading)。Overloaded的方法是能夠改變返回值的類型。也就是說,重載的返回 <br />值類型能夠相同也能夠不一樣。</p>函數