Java 当超级类默认构造函数有一个';抛出';条款
当我运行下面的代码时,我遇到了未报告的异常 我的代码如下所示Java 当超级类默认构造函数有一个';抛出';条款,java,exception,Java,Exception,当我运行下面的代码时,我遇到了未报告的异常 我的代码如下所示 class Super { public Super() throws Exception { System.out.println("Super Class"); } } public class Sub extends Super { public static void main(String[] args) throws Exception { Su
class Super {
public Super() throws Exception {
System.out.println("Super Class");
}
}
public class Sub extends Super {
public static void main(String[] args) throws Exception {
Sub s = new Sub();
}
}
出现以下错误:
Sub.java:6:默认构造函数中未报告的异常java.lang.exception公共类子类扩展超级{
1错误您尚未为Sub定义默认构造函数,Super正在报告已检查的异常。若要修复此错误,请将此构造函数添加到Sub:
public Sub() throws Exception {
super();
}
Eclipse正在报告下面的代码,并拒绝编译代码 默认构造函数无法处理隐式超级构造函数引发的异常类型异常。必须定义显式构造函数
因此,您必须显式定义一个这样做的构造函数。所有类的默认构造函数默认调用超级类默认构造函数。现在,当您的超级类构造函数引发异常时,当子类构造函数调用超级类构造函数时,它需要处理或引发异常。
现在在您的类中,您还没有提到任何构造函数,所以编译器将创建一个默认构造函数,并将super()作为super()调用抛出异常,而您的构造函数没有抛出/处理任何异常,它将无法编译。我同意Jalynn2。另一个解决方案是对RuntimeException进行异常处理,因为您没有在该构造函数中提出任何特别的问题
class Super {
public Super() throws RuntimeException {
System.out.println("Super Class");
}
}
谢谢你的ans,我得到的结果没什么大不了的,但是你不需要显式调用super()-编译器会自动完成这项工作。