gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:20:54 24 4
gpt4 key购买 nike

我想知道使用抽象类和接口(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com