下面的代码是方法重载或重写的例子吗?
我将一个方法从超类继承到具有 main
方法的子类中,但很少有网站表明重载方法应该仅在父类中重新定义,但我还没有这样做。
class overload
{
public static void sum(int a, int b, int c)
{
System.out.println("sum="+(a + b + c));
}
}
class Main extends overload
{
static void sum(int a, int b)
{
System.out.println("sum="+(a+b));
}
public static void main (String s [])
{
sum(1,2);
sum(1,2,3);
}
}
是的,这是重载:它提供了两个名称相同但签名不同的方法。
重写只发生在相同的签名中,其中子类提供了不同的实现,而不更改公开的API。跨类层次结构而不是在同一个类中声明的所有方法进行重载会增加额外的复杂性,但这并不能改变这样一个事实:从根本上说,这就是重载。
(请注意,这里是否存在< code>main方法并不重要。如果没有它,您的代码仍然会是一个重载的例子。)
更复杂的是,静态方法不能进行重写。子类可以声明一个与超类中的方法具有相同签名的静态方法,而不用覆盖任何东西——因为当静态方法被调用时,没有对象可以用来选择调用哪个实现。这不会是一个覆盖或超载的情况。