被覆盖的方法无法抛出异常
比如我有个interface中定义了一个方法doublecalculateVolume();,然后在一个class里覆盖了这个方法并抛出异常publicdoublecal...
比如我有个interface中定义了一个方法double calculateVolume();,然后在一个class里覆盖了这个方法并抛出异常
public double calculateVolume() throws InvalidDimensionException
{
throw new InvalidDimensionException();
}
编译的时候说被覆盖的方法无法抛出异常,我也怎么解决? 展开
public double calculateVolume() throws InvalidDimensionException
{
throw new InvalidDimensionException();
}
编译的时候说被覆盖的方法无法抛出异常,我也怎么解决? 展开
6个回答
展开全部
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{
}
}
编译没问题
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");
throw new RuntimeException();
}
public static void main(String[] args){
new b().a();
}
}
运行
a
Exception in thread "main" java.lang.RuntimeException
at b.a(b.java:5)
at b.main(b.java:8):
他会先输出a 仁厚抛出 写在方法里的java.lang.RuntimeException
异常,并写出了 抛出异常的地方。
如果子类中定义方法所用的名字、返回类型、和参数表和父类中的方法使用完全一样.
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");
throw new RuntimeException();
}
public static void main(String[] args){
new b().a();
}
}
运行
a
Exception in thread "main" java.lang.RuntimeException
at b.a(b.java:5)
at b.main(b.java:8):
他会先输出a 仁厚抛出 写在方法里的java.lang.RuntimeException
异常,并写出了 抛出异常的地方。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当然无法抛出~ 只有INTERFACE 里面方法抛出,实现它的时候才可以抛出!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在interface里这样定义。
double calculateVolume() throws InvalidDimensionException ;
double calculateVolume() throws InvalidDimensionException ;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询