呼吁超级需要尝试/捕获

时间:2012-11-20 20:53:02

标签: java inheritance exception-handling

我正在进行一项任务,我被告知需要创建一个必须扩展给定类的类(称为ClassB)(称之为ClassA)。唯一的问题是ClassA的构造函数内部的代码可能抛出一个异常,所以当我为ClassB创建构造函数时,我试图围绕对super()的调用包装一个try / catch块,但当然,那个因为超级必须是第一个电话,所以不起作用。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

public ClassB extends ClassA {
    public ClassB() throws MyClassAException {
        super();
    }
}

答案 1 :(得分:1)

您可以在子类构造函数的throws子句中添加异常: -

class ClassA {
    ClassA() throws Exception {

    }
}
public class Demo extends ClassA {
    Demo() throws Exception {
        super();
    }

    public static void main(String[] args) {
        try {
            Demo d = new Demo();   // Handle exception here.
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

答案 2 :(得分:0)

ClassB应该有一个静态方法

public static ClassB makeClassB() {
    try {
        return new ClassB();
    }
    catch(Exception exc) {
        // whatever logic you are currently performing to swallow
        // presumably you have some default ClassB to return as part of this logic?
    }

将使用try / catch包装ClassB的构造。客户端代码将调用makeClassB()ClassB的构造函数将为private并抛出。