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
的父级。
答案 0 :(得分:8)
您提供的规则是正确的,但它适用于已检查的异常,而不适用于运行时异常。允许任何方法抛出它想要的任何运行时异常,而不声明它。您可以声明它们,但它纯粹是出于文档目的。
要回答您的问题,是的,Fir中的toString(String)
方法会覆盖Test中的toString(String)
方法。将@Override
注释添加到Fir.toString()
,编译器将为您检查:如果Fir.toString(String)
没有覆盖任何方法,您将收到编译错误。
答案 1 :(得分:3)
问题:这些方法是否重写?
没有。这些方法是overloaded
原始方法如下所示:
public String toString()