方法重载与方法覆写的概念与区别

Java中有两个很重要的概念,分别是方法重载方法覆写

先分别介绍这两个概念,再统一分析它们的差别

1. 方法重载

可以说,方法重载是Java语言的一大特点与优点,在C语言中,不允许拥有两个同名的函数,这给我们带来很大不便,而在Java中,支持多个方法可以同名(合法要求下),这让用户端得到很大便利,调用一个名字则可以使用多种不同参数的方法;

下面看一个方法重载的例子:

public class Exer1 {
    public static void main(String[] args) {
        System.out.println(add(2, 4));
        System.out.println(add(2.0, 4.0));
    }

    public static int add(int x, int y) {
        return x + y;
    }

    public static double add(double x,double y) {
        return x + y;
    }
}

从这段代码可以看到,有了方法重载,可以接受不同类型的参数,返回不同类型的值,在C语言中,必须实现两个函数才能实现;

方法重载定义:

  • 方法名相同
  • 参数的类型、顺序或个数不同(参数列表不同)
  • 与返回值类型无关

2.方法覆写

方法覆写在Java中显得尤为重要。这与继承有着密切的关联;
在Java中,方法覆写一定发生在继承关系中,若在同一个类中,这不叫方法覆写,也会报错

下面看一段代码:

class Person {
    private String name;
    public void fun() {
        System.out.println("father");
    }
}
class Student extends Person {
    private String school;
    public void fun() {
        System.out.println("son");
    }
}

public class Exer1 {
    public static void main(String[] args) {
        Student stu = new Student();
        stu.fun();
    }
}

在这段代码中,运行的结果是:son
在main方法中,我们记住,是谁new的这个对象,则调用谁的方法;
方法覆写定义:

  • 与父类方法名称、参数类型及个数完全相同
  • 覆写方法不能拥有比父类更为严格的访问控制权限(public>default>private)
  • 若父类方法由private修饰,则此方法不能够方法覆写(private代表只能在本类中可见,则子类根本不知道父类有这样一个方法,则不能覆写)

除了方法覆写,还有属性覆盖这一概念,但实际意义不大,因为属性一般都用private封装,这里我们不深入了解

3.方法重载与方法覆写的区别⭐

前面分别详细介绍了,这里我直接归纳:

区别 重载 覆写
概念 方法名称相同、参数的类型及个数不同 方法名称、返回值类型、参数的类型及个数完全相同
范围 一个类 继承关系
限制 没有权限要求 被覆写的方法不能拥有比父类更严格的访问控制权限

猜你喜欢

转载自blog.csdn.net/eternal_yangyun/article/details/85927501