| 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(); } } 問(wèn)題:上述程序能編譯通過(guò)嗎?如果不能,請說(shuō)明理由。如果能編譯通過(guò),那么能執行成功嗎?如果不能執行成功,請說(shuō)明理由。如果能執行成功,那么程序執行的結果是什么? 解答:上述程序無(wú)法編譯通過(guò)。 分析:此為考察java中方法重寫(xiě)的要求,由于父類(lèi)拋出的異常為NullPointerException,而子類(lèi)拋出的異常為Excetpion, 違背了方法重寫(xiě),子類(lèi)中方法拋出的異常范圍不能大于父類(lèi)中方法拋出的異常的范圍的原則,所以編譯不能通過(guò)。 總結:關(guān)于java中方法重寫(xiě)(override)的要求: 1、子類(lèi)中的方法與父類(lèi)中的方法有相同的返回類(lèi)型 2、子類(lèi)中的方法與父類(lèi)中的方法有相同的方法名稱(chēng) 3、子類(lèi)中的方法與父類(lèi)中的方法有相同的參數列表 4、子類(lèi)中的方法的訪(fǎng)問(wèn)級別不能低于父類(lèi)中該方法的訪(fǎng)問(wèn)級別(舉例:父類(lèi)方法的級別是protected,那么子類(lèi)重寫(xiě)該方法,其級別必須是protected或者public,一定和父類(lèi)的訪(fǎng)問(wèn)級別相同或者更寬,否則編譯無(wú)法通過(guò)) 5、子類(lèi)中方法拋出的異常范圍不能大于父類(lèi)中方法拋出的異常的范圍(子類(lèi)可以不拋出異常也滿(mǎn)足該原則,即是說(shuō)父類(lèi)拋出異常,子類(lèi)不拋出異常,編譯通過(guò)沒(méi)問(wèn)題。) |
聯(lián)系客服