overload:
1. 在同一个类中
2. 方法名一样,参数个数和参数类型不同
// all corret overloads
public void bark() {
System.out.println("No barking");
}
public String bark(String with, int i) {
System.out.println("No barking");
return "bark";
}
public void bark(int i, String with) {
System.out.println("No barking");
}
3. 返回值可以相同,可以不同。这不是判断 overload 的标准
// wrong corret overload
public void bark() {
System.out.println("No barking");
}
public String bark() {
System.out.println("No barking");
return "bark";
}
Overriding:
1. 父类与子类之间
2. 子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表 (注意在overload中, return value 不必相同)
3. 访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
因此,通过 override 可以扩大方法的访问权限
public class Base {
private void test(int i)
{
System.out.print(i);
}
}
public class ChildBase extends Base {
public void test(int i)
{
i++;
System.out.println(i);
}
}
test() 在 Base 中是private, 通过 override 后可以 public 访问。而反过来是错误的。