笔试代码如下:
public class Test {
public static void main(String[] args) throws Exception{
Parent p = new Child();
p.output();
}
}
class Parent {
public void output() throws NullPointerException {
}
}
class Child extends Parent{
public void output() throws Exception{
}
}
问:是否能够编译通过?
答:编译通不过。需要知道如下几个知识点:
- 方法覆盖(override)是发生在子类与父类之间的
- 能够实现方法覆盖的条件是:子类中的方法与父类中的方法有相同的方法名称,相同的参数列表的情况下,子类中的方法的访问级别不能低于父类中该方法的访问级别,子类中的方法抛出的异常范围不能大于父类中该方法抛出的异常范围,(注:子类可以不抛出异常),子类中的返回值要与父类中该方法的返回值相同或者是它的子类,满足上述条件可以实现方法覆盖。
补充知识点:
异常继承体系如下图: