2016-06-15 62 views
1

我有这样的代码:将异常消息传递给父类,但不构造带有抛出新异常()的消息;

public class ExceptionFather extends Exception {} 

public class ExceptionSon extends ExceptionFather { 
    String someMessage; 
    public ExceptionSon() { 
     super(someMessage); 
    } 
} 

我的目标是,儿子的异常将有会被自动传递自己固定的消息,我不会有在构造函数中每次我把它的时间来写邮件。

问题是,这给了我一个语法错误,说我必须有一个构造函数来获取消息作为它的参数。

+2

两个顶层公共类不应该在同一个文件 – Li357

+1

他们都没有,这是一个错误identation感谢 – Eyzuky

回答

2

你必须定义需要String参数在ExceptionFather类的构造函数:

class ExceptionFather extends Exception { 
    public ExceptionFather(String message) { 
     super(message); 
    } 
} 

之后,你就可以在子类ExceptionSonsuper(yourString)yourString不能是子实例变量,因为在超类型构造函数被调用之前它不能被访问。但你被允许使用静态(类)变量或String文字在这种情况下:

class ExceptionSon extends ExceptionFather { 
    private static String message = "message"; 
    public ExceptionSon() { 
     super(message); // or just "message" 
    } 
} 
+0

,但是这提出了另一个难题:现在当我抛出ExceptionFather类时,它会要求输入一个字符串,因为它的构造函数需要一个字符串。 – Eyzuky

+1

@Eyzuky,你需要定义一个没有参数的构造函数,因为当你声明另一个构造函数时,编译器不会放置默认构造函数(当没有构造函数时,编译器会为你默认) – Andrew

+0

@Eyzuky ,只记得一个简单的规则 - 构造函数不会从父项继承到子项 – Andrew