版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_34122324/article/details/83220402
覆盖和重载很重要,并且比较容易混淆,所以面试中常见。
基础回答:
覆盖(Override),又叫重写,是指子类对父类方法的一种重写,方法名、参数列表必须相同,返回值小于父类,只能比父类抛出更少的异常,访问权限不能比父类的小。被覆盖的方法是private的话,就不是重写,而是定义的一个新方法;
重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。
追加:那么构成重载的条件有哪些?
答:参数类型不同、参数个数不同、参数顺序不同
追加:函数的返回值不同可以构成重载函数吗?为什么?
答:不可以,因为Java中调用函数并不需要强制赋值。
比如有两个方法:
void fun(){}
int fun(){return 1;}
在调用的时候,int x = fun();
编译器虽然可以直接识别而调用对应返回值类型的方法,但有时候你关心的不是他的返回值,而是调用的效果,这时候你会调用方法而忽略返回值。
像这样的调用:fun();
这时候Java编译器就不能判断调用的是哪一个fun()了,程序人员理解上容易发生错误。
所以,根据返回值来区分重载方法是行不通的。