Overload是重载的意思,Override是覆盖的意思,也就是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相 当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父 类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是 private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
多态有两种表现形式,就是重载和覆盖。
比较说明:
Overload:是重载的意思,这没啥能混淆的了,就是在同一个类当中,为了增加通用性,写了很多方法,这些方法只有一个要求,参数的数量和类型不同,但返回值和方法属性必须相同,否则不属于重载。重载是针对相同的一个类而言,也就是说一个类可以有很多同名不同参的方法。
Override:有人翻译是重写,有人翻译是覆写,覆盖等。其实更像是一种扩展,因为它是在父类中声明方法(一般是抽象的),在子类中根据需求去具体定义方法的行为(即modify behavior as needed)
它要求override的方法有相同的名字、相同的参数、相同的返回值类型(即the same name, number and type of parameters, and return type)。它是一种晚绑定,是决定java多态的一种方式。
Overwrite:java中就没有它的存在,就别以讹传讹了,java官方文档没有该词的出现,但是国外有人把overwrite解释为override。重写是针对不同的类而言,而且不同的类存在着继承关系,也就说子类可以有个和父类一样的同名同参方法。
Bicycle类:
public class Bicycle implements Vehicle {
public void drive() { ... }
}
Motorcycle类:
public class Motorcycle extends Bicycle {
public void drive() {
// Do motorcycle-specific driving here, overriding Bicycle.drive()
// (we can still call the base method if it's useful to us here)
}
}