Java中子类覆盖父类方法所必须满足的条件
因為太喜歡,所以轉來,侵刪!
參考自:http://www.it165.net/pro/html/201504/39284.html
?
一、描述
子類重寫(覆蓋)父類的方法必須滿足的條件:
1.父類中的方法在子類中必須可見,即子類繼承了父類中的該方法(可以顯式的使用super關鍵字來訪問父類中的被重寫的方法), 如果父類中的方法為private類型的,那么子類則無法繼承,也無法覆蓋。
2.子類和父類的方法必須是實例方法,如果父類是static方法而子類是實例方法,或者相反都會報錯。 如果父類和子類都是static方法,那么子類隱藏父類的方法,而不是重寫父類方法。
3.子類和父類的方法必須要具有相同的函數(shù)名稱、參數(shù)列表,并且子類的返回值與父類相同或者是父類返回類型的子類型(jdk1.5之后)。 如果方法名稱相同而參數(shù)列表不同(返回類型可以相同也可以不同),那么只是方法的重載,而非重寫。 如果方法名稱和參數(shù)列表相同,返回值類型不同,子類返回值類型也不是父類返回值類型的子類,編譯器就會報錯。
4.子類方法的訪問權限不能小于父類方法的訪問權限(可以具有相同的訪問權限或者子類的訪問權限大于父類)。 訪問權限由高到低:public、protected、包訪問權限、private。如果子類方法的訪問權限低于父類,則編譯器會給出錯誤信息
5.子類方法不能比父類方法拋出更多的編譯時異常(不是運行時異常),即子類方法拋出的編譯時異常或者和父類相同或者是父類異常的子類。
二、源代碼
?
package tong.yue.day4_264;import java.io.FileNotFoundException; import java.io.IOException;import javax.swing.JButton; import javax.swing.JComponent; /*** 子類重寫(覆蓋)父類的方法必須滿足的條件:* 1.父類中的方法在子類中必須可見,即子類繼承了父類中的該方法(可以顯式的使用super關鍵字來訪問父類中的被重寫的方法),* 如果父類中的方法為private類型的,那么子類則無法繼承,也無法覆蓋。* 2.子類和父類的方法必須是實例方法,如果父類是static方法而子類是實例方法,或者相反都會報錯。* 如果父類和子類都是static方法,那么子類隱藏父類的方法,而不是重寫父類方法。* 3.子類和父類的方法必須要具有相同的函數(shù)名稱、參數(shù)列表,并且子類的返回值與父類相同或者是父類返回類型的子類型(jdk1.5之后)。* 如果方法名稱相同而參數(shù)列表不同(返回類型可以相同也可以不同),那么只是方法的重載,而非重寫。* 如果方法名稱和參數(shù)列表相同,返回值類型不同,子類返回值類型也不是父類返回值類型的子類,編譯器就會報錯。* 4.子類方法的訪問權限不能小于父類方法的訪問權限(可以具有相同的訪問權限或者子類的訪問權限大于父類)* 訪問權限由高到低:public、protected、包訪問權限、private。如果子類方法的訪問權限低于父類,則編譯器會給出錯誤信息* 5.子類方法不能比父類方法拋出更多的編譯時異常(不是運行時異常),即子類方法拋出的編譯時異常或者和父類相同或者是父類異常的子類。* @author tong**/public class Inheritance {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stub }}class Pareant {public void doSomething() {}public static void doSomething1() {}public JComponent doSomething2() {return null;}public JComponent doSomething3() {return null;}public void doSomething4(int x) {}public void doSomething5() throws FileNotFoundException{}private void doSomething6(int x) {} }class Sub extends Pareant {//父類中該方法是私有的,對子類不可見,所以子類無法繼承和覆蓋父類的私有方法//在這里并沒有覆蓋父類的私有方法,而是在子類中創(chuàng)建了一個新的和父類同名的方法而已,這兩個方法沒有任何關系private void doSomething6(int x) {}// 報錯,父類為實例方法,子類為靜態(tài)方法//This static method cannot hide the instance method from Pareantpublic static void doSomething() {}// 報錯,父類為靜態(tài)方法,子類為實例方法//This static method cannot hide the instance method from Pareantpublic void doSomething1() {}// 正確,父類的返回值為JComponent,是子類返回值類的父類,從jdk1.5開始,重寫父類方法時的返回值可以與父類相同,也可以是父類的子類public JButton doSomething2() {return null;}// 報錯,父類的返回值為JComponent,子類返回值類型為int,子類返回值與父類返回值類型不同,也不是父類返回值的子類//The return type is incompatible with Pareant.doSomething3()public int doSomething3() {return 1;}//報錯,父類的訪問權限為public,子類為protected,子類的訪問權限不能低于父類,可以高于或者等于父類的訪問權限//Cannot reduce the visibility of the inherited method from Pareantprotected void doSomething4(int x) {}//報錯,子類不能拋出比父類更多的異常,父類拋出FileNotFoundException異常,子類拋出的IOException是父類異常的父類//子類只能拋出和父類一樣的異常,或者是父類異常的子類,而不能超過父類//Exception IOException is not compatible with throws clause in Pareant.doSomething5()public void doSomething5() throws IOException{}}?
轉載于:https://www.cnblogs.com/jenkov/p/javacastingfunction.html
總結
以上是生活随笔為你收集整理的Java中子类覆盖父类方法所必须满足的条件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IT “服务”
- 下一篇: MySql 常见错误代码大全