黑马程序员技术交流社区

标题: override与重载的区别 [打印本页]

作者: 芦路    时间: 2013-10-20 18:28
标题: override与重载的区别
本帖最后由 芦路 于 2013-10-21 08:33 编辑

override与重载有什么区别?
作者: 龏鈊づ廱鵆ぐ    时间: 2013-10-20 19:02
其实很本质的区别就是看函数特征:
覆写(Override)的两个函数的函数特征相同
重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
函数特征包括函数名,参数的类型和个数。

Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
比如:Derived继承了Base,Base里面有void A(int a)
那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。
Overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。
作者: 追梦无悔    时间: 2013-10-20 19:54
override(重写):将方法重写一遍,方法名和参数相同
overload(重载):写一个方法名相同,参数列表不同
作者: ╰┄轩、辕_ヤ    时间: 2013-10-20 20:03
Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。
        Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。

        也就是说,如果在子类声明相同的方法名称的时候,如果不是用inherited来继承的话,就会将父类的方法覆盖掉;而且父类的方法声明必须标识为virtual和dynamic;overload比较好理解,就是同类里有许多相同的方法名称,但是参数不相同。且第一个方法可以不用overload来标识。

        override的方法返回值类型必须一致,其modifier可以扩大,不可以缩小。

        一个不是用abstract标识的方法不可以override成abstract方法。

       override的子类的方法拋出的异常只能是父类方法拋出异常的子异常。

Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类型。
        Overload(重载)是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,这些方法有着相同的名称和不同的参数类型。

        也就是说,如果在子类声明相同的方法名称的时候,如果不是用inherited来继承的话,就会将父类的方法覆盖掉;而且父类的方法声明必须标识为virtual和dynamic;overload比较好理解,就是同类里有许多相同的方法名称,但是参数不相同。且第一个方法可以不用overload来标识。

        override的方法返回值类型必须一致,其modifier可以扩大,不可以缩小。

        一个不是用abstract标识的方法不可以override成abstract方法。

       override的子类的方法拋出的异常只能是父类方法拋出异常的子异常。

作者: 重新开始    时间: 2013-10-20 20:24
重载:
构造函数的名字和它从属的类的名字相同,方法名相同,参数列表不同
对象和方法的名字有时候会面临重载的需要,例如类的构造函数的引入,因为有时候会需要使用几种不同的方法来创建对象,例如既能用标准的无参数方法来初始化,又可以使用带String类型的参数的方法来读取磁盘上的配置文件来初始化,这就需要建立两个构造函数,它们的名字是相同的,于是就牵出了方法重载的要求。

重写(override):
父类与子类之间的多态性,对父类的函数进行重新定义,将方法重写一遍,方法名和参数相同
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
重写注意点:
1、必须是子类继承父类,在子类中重写父类的方法
2、方法名、返回值类型、参数个数、参数类型都必须相同,抛出异常的允许情况也必须相同,一句话,只有方法里面的功能语句可以不同。
3.、子类重写父类的方法的访问修饰符不能低于父类。
作者: aihuahuaxx    时间: 2013-10-20 21:37
重载,函数名相同,但参数类型或个数或顺序不同。其用途比如:可读性强;在构造器的时候根据参数初始化你想要的实例;代码维护性高,重载的方法,处理逻辑的代码通常都在一个方法里,其他方法通常调用偏多
。重载是要有以前写好的方法自己用不用的参数来调用。
override,是重写,字面意思,就是重写某个方法的业务逻辑。最大用途是多态,其实重载也是一种多态,但二种多态有个差别是,重载是编译时多态,override是运行时多态。重写这是以前有的方法我现在要自己重新写我要实现的功能。
作者: 小人渣子    时间: 2013-10-20 22:30
重载:同一个类中拥有不同参数的同名函数
重写:使用override关键字重写父类中方法的实现,子类中不得改变该方法的声明
作者: 茹化肖    时间: 2013-10-20 22:31
override修饰符,覆写一个基类中的方法...重载则是将将同名方法重新写过,达到同名的函数实现不同的功能.从而实现了一个方法有不同的版本.override与重载的本质区别是,加入了override的修饰符的方法,此方法始终只有一个被你使用的方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2