Java中覆盖和重载是什么?重载条件?返回值不同可以构成重载吗?

覆盖和重载很重要,并且比较容易混淆,所以面试中常见。

基础回答:

覆盖(Override),又叫重写,是指子类对父类方法的一种重写,方法名、参数列表必须相同,返回值小于父类,只能比父类抛出更少的异常,访问权限不能比父类的小。被覆盖的方法是private的话,就不是重写,而是定义的一个新方法;

重载(Overload)表示同一个类中可以有多个名称相同的方法,但这些方法的参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同。

追加:那么构成重载的条件有哪些?

答:参数类型不同、参数个数不同、参数顺序不同

追加:函数的返回值不同可以构成重载函数吗?为什么?

答:不可以,因为Java中调用函数并不需要强制赋值。

比如有两个方法:

void fun(){}
int fun(){return 1;}

在调用的时候,int x = fun();

编译器虽然可以直接识别而调用对应返回值类型的方法,但有时候你关心的不是他的返回值,而是调用的效果,这时候你会调用方法而忽略返回值。

像这样的调用:fun();

这时候Java编译器就不能判断调用的是哪一个fun()了,程序人员理解上容易发生错误。
所以,根据返回值来区分重载方法是行不通的。

你可能感兴趣的:(Java基础学习)