重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别

时间:2021-06-06 09:19:25

        关于这三者之间,有很多书都说方法的重载就是方法的重写,也有很多书将两者加以区分,当然,也有很多书将覆盖和重载合并。正所谓人言可谓,我现在都开始怀疑我以前认为的两者说是不是正确的,当然,我不是认为两者说属于谬论。可是别人的三说论也有道理。我思索了半天也弄不清楚该信谁的。算了,不就一个概念吗,先记下。

        两者说:有重载(覆盖)和重写一说。(出自哪里忘了,是从笔记中找到的……)其中:

        重载:就是子类从父类中继承的同名方法,子类可以在这方法中重新定义自己的方法的实现。是子类对父类方法的再载入。

        重写:就是一个类中的方法同名,但是形参的类型和个数不一样,这叫做重写。

        两者说:有重写(覆盖)和重载一说。出自《Java语言程序设计》其中:

        重写:就是子类中有方法名和父类中的方法名称相同,但是实现不一样,这叫做重写。

        重载:一个类中,具有多个方法,这些方法的名称相同,但是方法签名不一样(也就是形参的类型和个数及返回值不一样),这就叫方法的重载。

        三者说:有重载、重写和覆盖。出自《Java高手真经之Java核心编程技术》其中:

        覆盖:子类继承了父类的同名无参函数。当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖。

        重载:子类继承了父类的同名有参函数。当子类继承了父类的一个同名方法,且方法参数不同,称为重载。通过方法的重载,子类可以重新实现父类的某些方法,使其具有自己的特征。

        重写:当前类的同名方法。通过方法的重写,一个类可以有多个具有相同名字的方法,由传递给它们不同的个数和类型的参数来决定使用哪种方法。因此,重写的名称是当前类中的同名函数,不是父类中的函数名。