public class Fir extends Test
{
public static void main(String args[])
{
Fir fir = new Fir();
System.out.println(fir);
}
public String toString(String x) throws RuntimeException
{
return "Fir";
}
}
class Test
{
protected String toString(String x) throws NullPointerException
{
return "Test";
}
}
这两个类都没有适当地覆盖
toString
方法。问题:是否重写了这些方法?
如果是,那么此规则如何:如果超类方法声明了异常,则子类重写方法可以声明相同,子类异常或无异常,但不能声明父异常。
RuntimeException
是NullPointerException
的父级。 最佳答案
您提供的规则是正确的,但它适用于已检查的异常,不适用于运行时异常。任何方法都可以抛出所需的任何运行时异常,而无需声明。您可以声明它们,但这纯粹是出于文档目的。
要回答您的问题,是的,Fir中的toString(String)
方法将覆盖Test中的toString(String)
方法。将@Override
批注添加到Fir.toString()
,编译器将为您检查:如果Fir.toString(String)
不覆盖任何方法,则会出现编译错误。