Java 既然构造函数不是继承的,为什么要在继承中处理异常?
正如我所知,构造函数不是继承的 那个么在子构造函数中处理异常的原因是什么呢。在我们创建子对象的时候,在场景后面有人在创建父对象吗Java 既然构造函数不是继承的,为什么要在继承中处理异常?,java,Java,正如我所知,构造函数不是继承的 那个么在子构造函数中处理异常的原因是什么呢。在我们创建子对象的时候,在场景后面有人在创建父对象吗 public class Parent { public Parent() throws Exception{ } } class Child extends Parent { public Child(){ // compile time error "Unhandled Exception Type" } } 我没有试图通过
public class Parent {
public Parent() throws Exception{
}
}
class Child extends Parent {
public Child(){ // compile time error "Unhandled Exception Type"
}
}
我没有试图通过在子构造函数中调用Super()
来初始化父类。我不明白我们为什么要这样做
提前谢谢 关于
如果构造函数主体不是以显式构造函数调用开头。。。然后构造函数体隐式地以超类构造函数调用super()开始
换句话说,以下代码在语义上与您的子类
类的定义相同:
class Child extends Parent {
public Child(){ // compile time error "Unhandled Exception Type"
super(); // This throws Exception.
}
}
这必须发生,因为初始化父实例所需的初始化必须发生。考虑如果没有调用超级构造函数会发生什么:
class Parent {
private final Frobnitz foo;
Parent() throws Exception {
foo = new Frobnitz();
}
void doSomething() {
foo.doYourFrobbing();
}
}
class Child extends Parent { ... }
class Main {
public static void main(String[] args) {
new Child().doSomething(); // Would cause a NPE unless Parent() is called (implicitly or explicitly).
}
}
如果创建类型为child的对象,将调用(显式或隐式)超类的构造函数。这就是您需要捕获异常的原因。如果不在子类的构造函数中显式调用
super()
,它将被隐式调用,因此您必须捕获异常,或者声明子类的构造函数抛出异常。super()
将被隐式调用。看这个:谢谢你的投入。明白了。如果从以下引用开始,这个答案会更好:“如果构造函数体不是以显式构造函数调用开始……那么构造函数体隐式地以超类构造函数调用开始super();
”