Override和Overload区别,Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思,

Override是覆盖的意思,也就是重写。

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。

子类方法的访问权限只能比父类的更大,不能更小。

如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。

但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。

这是不行的,

我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,

例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。

对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。

除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:

Override 的特点

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:

Overload 的特点

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

总结:

override(重写,覆盖) (发生在子类与父类中)

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载,过载) (发生在同一个方法中)

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-11 02:20:25

Override和Overload区别,Overloaded的方法是否可以改变返回值的类型?的相关文章

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思,Override是覆盖的意思,也就是重写. 重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现.子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常

方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表现. 1.重写overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现. 2.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding). 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"

Java常见面试题02-方法重写和方法重载的区别?方法重载能改变返回值类型吗?

方法重写和方法重载的区别?方法重载能改变返回值类型吗?       A:Override方法重写和Overload方法重载的区别? Overload是否可以改变返回值类型?可以 方法重写 •  子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写. •  使用特点: •   如果方法名不同,就调用对应的方法 •   如果方法名相同,最终使用的是子类自己的 父类方法重写格式:super.父类成员方法名 •  方法重写的注意事项   父类中私有方法不能被重写   子类重写父类方法时,访

Overload和Override的区别,Overload 的方法是否可以改变返回值类型?

Overload:重载,发生在同一个类中,各个方法名相同,方法参数的个数.顺序或类型不同:返回值类型不同或形参名称不同,不构成方法重载: Override:重写,发生继承关系中,子类所重写的方法与父类方法 方法名相同,参数个数.顺序和类型相同:返回值类型相同或者是 父类中的返回值类型的子类.子类不能重写父类的private(私有).static和final方法,子类中重写的方法不能抛出比父类更大的异常.构造方法不能被重写. 原文地址:https://www.cnblogs.com/remta/p

java处理方法的多个返回值

我第一次接触到元组是在java编程思想这本书中,当时我正为方法的多个返回值苦恼.因为我之前处理多个返回值方法的时候,要不建一个新的实体类,要不在接收的方法中建立一个对象,返回值之前给其赋值,要不通过异常机制向上抛出,不管哪一种都很繁琐.但是元组不一样,我们只要建立好元组类 和工具类就可以在任何地方使用,而且简单,明了. /*** * 功能描述:登录 * @author 程三发 2016-5-26 下午03:21:30 * @param loginName 用户名 * @param appType

spring处理方法返回值的类型

spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModeAndView: @RequestMapping("/show1") public ModelAndView show1(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndVi

java method 方法的参数与返回值

public class TestJava4_9 { public static void main(String args[]) { int num; num = star(7); System.out.println(num+" stars printed"); } public static int star(int n) { for (int i = 1; i < 2*n; i++) { System.out.print("*"); } System.

Controller中方法返回值其他类型需要添加jackson依赖

第一个 第二个: 第三个 https://www.cnblogs.com/codejackanapes/p/5569013.html:json的博客园 springmvc默认的是:2.Jackson:http://jackson.codehaus.org/ https://www.cnblogs.com/makan/p/4775030.html:各种软件借口链接 原文地址:https://www.cnblogs.com/Koma-vv/p/10181886.html

使用对象类型 作为方法的参数和返回值

原文地址:https://www.cnblogs.com/wulinmiao/p/12081502.html