一、方法重载(overload)
Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同。调用方法时通过传递给它们的不同个数和类型的参数,以及传入参数的顺序来决定具体使用哪个方法。
public class Demo {
public void add(){ //不带参数,无返回值
}
public void add(int a){ //重载上面的方法,并且带了一个整形参数,无返回值
}
public int add(int a,int b){ //重载上面的方法,并且带了两个整型参数,返回值为int型
return 0;
}
}
由上面的例子可知:
方法名 | 相同 |
---|---|
参数列表 | 不同 |
返回类型 | 可以相同,也可不同 |
因此,无法以返回类型作为重载函数的区分标准。
二、方法重写(override)
子类中出现和父类中一模一样的方法(返回值类型可以是子父类),则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
class Shape{
void getArea(){//面积
System.out.println("长*宽");
}
}
class Circle extends Shape{
@Override
void getArea(){
System.out.println("π*r*r");
}
}
class TestDemo{
public static void main (String[] args){
Circle circle = new Circle();
circle.getArea();
}
}
注意事项:
- 重写的方法用@override注解来标识
- 父类中私有方法(private)不能被重写
- 被final修饰的方法不能重写
- 被static修饰的方法不能重写
- 子类中重写的方法的访问权限不能低于父类中方法的访问权限(修饰符高低:private < 默认修饰符<protected < public)
方法重写的原理:
方法重写的原理:方法区中的地址覆盖
三、重写与重载的区别
方法重写 | 方法重载 | |
---|---|---|
注解 | Override | Overload |
范围 | 继承关系,子类中 | 同一个类 |
参数列表 | 相同 | 不同 |
访问权限 | 被重写的方法不能拥有更严格的权限 | 对权限无要求 |
作用时间 | 运行期 | 编译器 |