Java中的重写和重载

175 阅读2分钟

重写和重载是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关键字调用了父类的同名方法,同时让其拓展了自己的逻辑。

需要注意的是:重写的方法必须与父类方法在方法名、参数列表和返回值上完全相同,且访问修饰符不能比父类更严格,同时,构造函数也不能被重写

重载与重写区别在于参数列表是否相同。重载是在一个类中定义多个方法,方法名相同但参数列表不同,用于在不同的情况下提供不同的实现方式;而重写是在继承关系中,子类重写父类中的方法,用于提供不同的实现方式。