繼承中方法的覆蓋
阿新 • • 發佈:2017-11-08
lock bsp 繼承 mage end ont 是個 -1 per
執行下邊的代碼:
class Parent2{ public void Print() { System.out.println("今天是個好日子!!"); } } class Child2 extends Parent2{ public void Print() { //super.Print(); System.out.println("今天不是個好日子!!"); } } public class super1 { public static void main(String[] args) { Child2 a=new Child2(); a.Print(); } }
輸出結果為:
原因分析:在子類中重新聲明一個與父類同名同參數的函數,會使父類的函數被子類的覆蓋,從而不會被輸出出來,
若想調用父類的函數,則必須使用Super來調用。比如;若驗證以下代碼:
class Parent2{ public void Print() { System.out.println("今天是個好日子!!"); } } class Child2 extends Parent2{ public void Print() { super.Print(); System.out.println("今天不是個好日子!!"); } } public class super1 { public static void main(String[] args) { Child2 a=new Child2(); a.Print(); } }
輸出結果截圖:
如此,運用Super便可以是父類被覆蓋的函數顯示出來!!!
另外,Java中方法的覆蓋還有如下的幾條規則:
(1)覆蓋方法的允許訪問範圍不能小於原方法。
(2)覆蓋方法所拋出的異常不能比原方法更多。
(3)聲明為final方法不允許覆蓋。
例如,Object的getClass()方法不能覆蓋。
(4)不能覆蓋靜態方法。
繼承中方法的覆蓋