Java 这个程序为什么要编译?
这两个类都不会适当地重写Java 这个程序为什么要编译?,java,Java,这两个类都不会适当地重写toString方法 问题:这些方法是否被覆盖 如果是,那么这个规则呢:如果超类方法声明了一个异常,子类重写的方法可以声明相同的异常、子类异常或无异常,但不能声明父类异常RuntimeException是NullPointerException的父级 问题:这些方法是否被覆盖 否。这些方法是重载的 原始方法如下所示: public class Fir extends Test { public static void main(String args[])
toString
方法
问题:这些方法是否被覆盖
如果是,那么这个规则呢:如果超类方法声明了一个异常,子类重写的方法可以声明相同的异常、子类异常或无异常,但不能声明父类异常RuntimeException
是NullPointerException
的父级
问题:这些方法是否被覆盖
否。这些方法是重载的
原始方法如下所示:
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";
}
}
您给出的规则是正确的,但它适用于已检查的异常,而不适用于运行时异常。任何方法都可以抛出它想要的任何运行时异常,而无需声明它。您可以声明它们,但这纯粹是为了文档目的
要回答您的问题,是的,Fir中的
toString(String)
方法会覆盖测试中的toString(String)
方法。将@Override
注释添加到Fir.toString()
,编译器将为您检查:如果Fir.toString(String)
没有覆盖任何方法,您将得到编译错误。您尝试过编译/运行它吗?适当地。。。他们根本不想做超控@克里斯蒂安,我当然知道。输出为Fir@5e8fce95well,它是-见JB Nizet'sanswer@IanMcGrath我误解了。我以为您指的是重写对象
中的toString()
方法,而不是测试
中的方法。对不起,哎呀,我忘了这条规则。谢谢。JB对@Override
注释提出了一个很好的观点。重写方法时应始终使用它,以便编译器帮助您捕获错误。但是Fir
中的toString(String)
方法确实重写了Test
中的toString(String)
方法。因此,相对于Object.toString()
重载,但相对于彼此重写。
public String toString()