重写和重载是Java中两个非常重要的概念。我们都知道,Java是一种面向对象编程的语言,而面向对象有三大基本特征:封装、继承、多态。在Java中,多态是通过重写和重载两种机制来实现的
重载(Overload)
重载是指在同一个类中定义多个方法,他们的方法名相同,但参数列表不同,在方法名相同的情况下,根据传递参数的不同会调用对应的方法,这个过程就是“方法重载”,下面我们来看看在代码中的实现
public void add(int number) {
number += number;
}
public void add(double number) {
number += number;
}
这里我们定义了两个相同名字的方法,他们所需要的参数类型不相同,根据传入参数不同会调用对应的方法,Java中的有参构造和无参构造也属于重载,上面的两个方法即使返回值不同,也能够构成重载
public void add(int num,double number) {
number += number;
}
public void add(double number, int num) {
number += number;
}
上面两个方法所需要的两个参数都相同,但是他们的顺序是不同,因此也属于方法重载
重写(Override)
重写是指在一个子类中定义一个与父类方法名、参数列表完全相同的方法,并使用"Override"注解,这个过程被称为"方法重写",当我们调用这个子类的方法时,实际上调用的时子类重写的方法,而不是父类的方法。当原有方法无法满足新需求的时候,我们就可以使用重写来拓展其功能而不用去修改原本的功能代码
class Person {
String name = "人";
public String getName() {
return name;
}
}
class Student extends Person {
String name = "学生";
@Override
public String getName() {
return super.getName() + name;
}
}
在上面的代码中,子类重写了父类的getName方法,通过super关键字调用了父类的同名方法,同时让其拓展了自己的逻辑。
需要注意的是:重写的方法必须与父类方法在方法名、参数列表和返回值上完全相同,且访问修饰符不能比父类更严格,同时,构造函数也不能被重写
重载与重写区别在于参数列表是否相同。重载是在一个类中定义多个方法,方法名相同但参数列表不同,用于在不同的情况下提供不同的实现方式;而重写是在继承关系中,子类重写父类中的方法,用于提供不同的实现方式。