4

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

我该如何解决这个问题?

4

3 回答 3

6
public ClassB extends ClassA {
    public ClassB() throws MyClassAException {
        super();
    }
}
于 2012-11-20T20:54:57.850 回答
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();
        }
    }
}
于 2012-11-20T20:55:47.833 回答
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?
    }

这将ClassB用 try/catch 包装结构。客户端代码将调用makeClassB()并且构造函数ClassB将被private抛出。

于 2012-11-20T21:03:44.677 回答