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方法。

问题:是否重写了这些方法?

如果是,那么此规则如何:如果超类方法声明了异常,则子类重写方法可以声明相同,子类异常或无异常,但不能声明父异常。 RuntimeExceptionNullPointerException的父级。

最佳答案

您提供的规则是正确的,但它适用于已检查的异常,不适用于运行时异常。任何方法都可以抛出所需的任何运行时异常,而无需声明。您可以声明它们,但这纯粹是出于文档目的。

要回答您的问题,是的,Fir中的toString(String)方法将覆盖Test中的toString(String)方法。将@Override批注添加到Fir.toString(),编译器将为您检查:如果Fir.toString(String)不覆盖任何方法,则会出现编译错误。

09-26 06:08