方法重载(Overload)条件:
方法名称相同
方法参数类型、个数、顺序至少有一个不同
方法的返回类型可以不同,因为方法重载和返回类型没有任何关系
方法的修饰符可以不同,因为方法重载和修饰符没有任何关系
方法重载只出现在同一个类中
代码示例
class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
}
public static int add(int x, int y) {
return x + y;
}
public static double add(int x, int y) {
return x + y;
}
}
// 编译出错
Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {
^
1 个错误
当两个方法的名字相同, 参数也相同, 但是返回值不同的时候, 不构成重载.
使用重载
class Test1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
double a2 = 10.5;
double b2 = 20.5;
double ret2 = add(a2, b2);
System.out.println("ret2 = " + ret2);
double a3 = 10.5;
double b3 = 10.5;
double c3 = 20.5;
double ret3 = add(a3, b3, c3);
System.out.println("ret3 = " + ret3);
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数
字相加.
同一个方法名字, 提供不同版本的实现, 称为 方法重载
方法的覆盖(Override)的条件:
什么叫方法的覆盖:子类实现父类的同名方法, 并且参数的类型和个数完全相同, 这种情况称为 覆写/重写/覆盖(Override)
必须要有继承关系
覆盖只能出现在子类中,如果没有继承关系,不存在覆盖,只存在重载
在子类中被覆盖的方法,必须和父类中的方法完全一样,也就是方名, 返回类型、参数列表,完全一样
子类方法的访问权限不能小于父类方法的访问权限
子类方法不能抛出比父类方法更多的异常,但可以抛出父类方法异常的子异常
父类的静态方法不能被子类覆盖(不被称为覆盖),静态方法处理的时候,访问权限发生错误也会提示覆盖
父类的私有方法不能覆盖
覆盖是针对成员方法,而非属性为什么需要覆盖?就是要改变父类的行为
方法权限示例: 将子类的 eat 改成 private
// Animal.java
public class Animal {
public void eat(String food) {
...
}
}
// Bird.java
public class Bird extends Animal {
// 将子类的 eat 改成 private
private void eat(String food) {
...
}
}
// 编译出错
Error:(8, 10) java: com.bit.Bird中的eat(java.lang.String)无法覆盖com.bit.Animal中的
eat(java.lang.String)
正在尝试分配更低的访问权限; 以前为public
另外, 针对重写的方法, 可以使用 @Override 注解来显式指定.
// Bird.java
public class Bird extends Animal {
@Override
private void eat(String food) {
...
}
}
来源:CSDN
作者:胡歌女票
链接:https://blog.csdn.net/zxjkl123/article/details/104571152