Java 抽象类声明 throwable - 实现不强制执行?

标签 java exception abstract extends

我想知道使用抽象类和接口(interface)之间的区别,这让我有点困惑:

假设你有一个抽象类

public abstract class Animal {   
//return the tail lenght of the animal
public abstract int getTailLength() throws IllegalStateException;
}

promise 抽象类的实现有一个名为 getTailLength() 的方法[编译器强制扩展类 @override 抽象类并实现它们],如下所示:

public Snake extends Animal(){

@override
public int getTailLength(){
  return 10;
}
}

编译器对此没有问题,但在抽象类中,当我们声明想要实现 getTailLenght() 时,我们还提到我们希望它抛出异常 - 但在上面的代码片段中已被省略。

我是否正确地认为,在对接口(interface)和“实现”声明执行相同操作时这是不允许的?

我想,因为您使用 @override 注释该方法,所以只要您有一个具有您在 ADT 中强制执行的名称的方法,编译器就不会关心您做什么?它确实检查返回类型,为什么它不强制执行异常?

最佳答案

我们不希望该方法一直抛出异常(否则我们永远不会得到有意义的结果),我们说“这个方法可能会抛出这个异常”。如果没有意义,让子类不抛出异常是完全可以的。

如果您的客户端代码知道它正在处理子类,那么它就不必处理异常,这是一个额外的好处。

在实现中不声明 throw 子句来实现声明 throw 子句的接口(interface)方法也是完全可以的。

关于Java 抽象类声明 throwable - 实现不强制执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35634702/

相关文章:

java - 无法捕获 IOException

java - 启动 Stardog 服务器时出错

Java从抽象类访问子类方法/变量

java - Spring mvc 空数组作为默认值

java - resteasy 和 multipart/form-data 请求的最大文件大小

java - "session"Web 应用程序中的 bean 作用域 - 可靠吗?

java - java中如何处理方法体外部的异常?

compiler-errors - typescript 抽象类错误TS1005 : ';' expected

php - 从抽象类中的静态函数获取类名

java - 无法使用父类中的变量?