被覆盖的方法无法抛出异常

来源:百度知道 编辑:UC知道 时间:2024/07/01 06:16:22
比如我有个interface中定义了一个方法double calculateVolume();,然后在一个class里覆盖了这个方法并抛出异常
public double calculateVolume() throws InvalidDimensionException
{
throw new InvalidDimensionException();
}
编译的时候说被覆盖的方法无法抛出异常,我也怎么解决?

在interface里这样定义。
double calculateVolume() throws InvalidDimensionException ;

javainlife 的代码为什么能打印出a,那是因为其抛出的异常是RuntimeException,所以在b.java中

public void a() throws RuntimeException
public void a()
两中写法是等价的

覆盖有个原则
子类覆盖父类的方法,那么子类方法声明抛出的异常必须是父类方法声明抛出的异常的本身或者其子类

比如说父类上面抛出Exception

那么子类方法声明可以抛出Exception 或者Exception的子类异常

下面的代码可以看看:
class MyException extends RuntimeException{

}
interface a{
public void aa();
}
class b implements a{
public void aa()throws MyException{

}
}
编译没问题

方法的覆盖 一般是发生在父类和子类之间
如果子类中定义方法所用的名字、返回类型、和参数表和父类中的方法使用完全一样.
1>子类对象引用被它隐藏了的父类的属性;
2>和调用被它覆盖了的父类的方法使用;
你那是实现了自己定义的个接口。
你的信息少点,给你写了个例子:
a.java
public interface a{
void a();
}

b.java
public class b implements a{
public void a() throws RuntimeException{

System.out.println("a"