gpt4 book ai didi

java - "overridden method does not throw Exception"?

转载 作者:行者123 更新时间:2023-12-01 06:07:53 26 4
gpt4 key购买 nike

我正在编写一个程序来演示继承和重写方法的使用。我想创建一个涉及使用异常的 if 语句。我已经在 if 语句中包含了异常,但是当我在方法的开头写入“抛出异常”时,我收到一条错误消息,上面写着“重写的方法不会抛出异常”。以下是代码:

子类

public class Carnivore extends Animal
{
public Food eat(Food x) throws Exception
{
if (x.equals("Plants")) {
throw new Exception("Carnivores only eat meat!");
} else {
return x;
}

}
public void makeNoise()
{
noise = null;
}
public String getNoise()
{
return noise;
}
}

超一流

abstract public class Animal {

String name;
int age;
String noise;

abstract public void makeNoise();

public String getName() {
return name;
}

public void setName(String newName) {
name = newName;
}

abstract public Food eat(Food x);

}

任何有关如何重写此代码以便正确引发异常的帮助,我们将不胜感激,谢谢。

最佳答案

由于您应该能够安全地用任何子类替换父类(super class)型实例,因此您无法添加不在重写方法中的检查异常。在这种情况下,您可以将 throws Exception 添加到您的 Animal#eat(Food) 方法中,或者将其从 Carnivore 中删除。

但是,实际上抛出一个普通的 Exception 类几乎总是一个坏主意;有许多单独的类具有意义。在您的情况下,您应该抛出一个 IllegalArgumentException,当方法调用因提供的参数不合适而失败时,这是正确的类型。这是一个未经检查的异常,不需要 throws 子句。

请注意,x.equals("Plants") 几乎肯定是错误的检查方法。要么为 Food 提供返回枚举值的 type() 方法,因此 x.type() == Foods.PLANTS,或者提供 boolean 值 isPlant() 方法,因此 x.isPlant()

关于java - "overridden method does not throw Exception"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40754684/

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