让我们看看JLS的重载方法是什么:
如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等效的,那么方法名称就是超载。
覆盖等价是什么意思?
让我们看看JLS说的是什么:
如果m1是m2的子签名或m2是m1的子签名,则两个方法签名m1和m2是覆盖等价的。
方法m1的签名是方法m2的签名的子签名,如果:
m2与m1具有相同的签名,或者m1的签名与m2签名的擦除(§4.6)相同。
现在,让我们看看上面的例子。
Sub中的2个私有方法被重载。
超级的method()不是Sub继承的,因为它是私有的。因此,在Super的方法()和Sub的方法(int x)之间没有过载。
让我们看一个在继承链中的类中重载的简单示例。在Eagle类中,fly()被重载。
public class Bird {
public void fly() {
System.out.println("Bird is flying");
}
public void eat(int food) {
System.out.println("Bird is eating "+food+" units of food");
}
}
public class Eagle extends Bird {
public int fly(int height) {
System.out.println("Bird is flying at "+height+" meters");
return height;
}
}