2018/6/8 Java中方法的重写(override)
public class Parent{
public void ou tput()throws NullPointerException{
System.out.println("parent");
}
}
public class Child extends Parent{
public void output() throws E xception{
System.out.println("child");
}
}
public class OverrideTest {
public static void mai n(String[] args) {
Parent p = new Child();
p.output();
}
}
问题:上述程序能编译通过吗?如果不能,请说明理由。如果能编译通过,那么能执行成功吗?如
果不能执行成功,请说明理由。如果能执行成功,那么程序执行的结果是什么?
解答:上述程序无法编译通过。分析:此为考察java中方法重写的 要求,由于父类抛出的异常为NullPointerException,而子类抛出的
异常为Excetpion, 违背了方法重写,子类中方法抛出的异常范围不能大于父类中方法抛出的异常的
范围的原则,所以编译不能通过。总 结:关于java中方法重写(override)的要求:
1、子类中的方法与父类中的方法有相同的 返回类型
2、子类中的方法与父类中的方法有相同的方法名称
3、子类中的方法与父类中的方法有相同的参数列表
4、子类中的方法的访问级别不能低于父类中该方法 的访问级别(举例:父类方法的级别是
protected,那么子类重写该方法,其级别必须是protected或者public,一定和父类的访问级别相
同或者更宽,否则编译无法通过)
5、子类中方法抛出的异常范围 不能大于父类中方法抛出的异常的范围(子类可以不抛出异常也满
足该原则,即是说父类抛出异常,子类不抛出异常,编译通过没问题。)