public class Parent{ public void output()throws NullPointerException{ System.out.println("parent"); } } public class Child extends Parent{ public void output() throws Exception{ System.out.println("child"); } } public class OverrideTest { public static void main(String[] args) { Parent p = new Child(); p.output(); } } 問題:上述程序能編譯通過嗎?如果不能,請說明理由。如果能編譯通過,那么能執(zhí)行成功嗎?如果不能執(zhí)行成功,請說明理由。如果能執(zhí)行成功,那么程序執(zhí)行的結(jié)果是什么? 解答:上述程序無法編譯通過。 分析:此為考察java中方法重寫的要求,由于父類拋出的異常為NullPointerException,而子類拋出的異常為Excetpion, 違背了方法重寫,子類中方法拋出的異常范圍不能大于父類中方法拋出的異常的范圍的原則,所以編譯不能通過。 總結(jié):關(guān)于java中方法重寫(override)的要求: 1、子類中的方法與父類中的方法有相同的返回類型 2、子類中的方法與父類中的方法有相同的方法名稱 3、子類中的方法與父類中的方法有相同的參數(shù)列表 4、子類中的方法的訪問級別不能低于父類中該方法的訪問級別(舉例:父類方法的級別是protected,那么子類重寫該方法,其級別必須是protected或者public,一定和父類的訪問級別相同或者更寬,否則編譯無法通過) 5、子類中方法拋出的異常范圍不能大于父類中方法拋出的異常的范圍(子類可以不拋出異常也滿足該原則,即是說父類拋出異常,子類不拋出異常,編譯通過沒問題。) |