
目录
重载(overload),Java中为了提高编程效率,允许我们使用方法重载,具体体现在,对于多个方法,他们的方法名相同,但参数列表不同,我们则将这种行为称为方法的重载,比如我们在定义一个加法的方法的时候,为了方便我们程序的调用,我们就可以通过更改参数列表的方法来体现出方法的不同
- public class Test_1 {
- public static int add(int a,int b) {
- return a+b;
- }
- public static int add(int a,int b,int c) {
- return a+b+c;
- }
- public static float add(float a,float b) {
- return a+b;
- }
- public static float add(int a,float b) {
- return a+b;
- }
- public static float add(float a,int b) {
- return a+b;
- }
-
- public static void main(String[] args) {
- add(1,2);
- add(1,2,3);
- add(1.2f,2.3f);
- add(1.2f,2);
- add(1,2.2f);
- }
- }
在这里需要注意的有以下几点:
我们可以演示以下,如果只是方法的返回值不同会是怎么样的效果:
- public static int add(int a,int b) {
- return a+b;
- }
- public static float add(int a,int b) {
- return a+b;
- }
当我们出现这样的情况的时候,编译器就会报错了,所以我们在实现重载的时候,切记返回值是否相同并无任何意义,不同的返回值并不会实现重载

编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法
重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。重写的好处在于子类可以根据需要,定义特定于自己的行为, 也就是说子类能够根据需要实现父类的方法。
重写规则:
比如我们用个简单的动物类来举例,我们定义一个动物类,里面有俩个参数,分别是名字和年龄,然后还有一个eat方法,然后我们分别写了Dog类和Cat类来继承了Animal类,在继承的子类中,我们分别重写了eat方法
- class Animal {
- String name;
- int age;
- public Animal(String name,int age){
- this.name = name;
- this.age = age;
- }
- public void eat() {
- System.out.println("动物正在吃食物");
- }
- }
- class Dog extends Animal{
- public Dog(String name,int age) {
- super(name,age);
- }
- public void eat() {
- System.out.println(this.name + "正在吃狗粮~~~");
- }
- }
- class Cat extends Animal{
- public Cat(String name,int age) {
- super(name,age);
- }
- public void eat() {
- System.out.println(this.name + "正在吃猫粮~~~");
- }
- }
对于我们子类继承后重写的方法,我们也可以使用多态的思想来调用他们
- public static void main(String[] args) {
- Cat cat = new Cat("布偶",2);
- Dog dog = new Dog("哈士奇",3);
- cat.eat();
- dog.eat();
- }
输出结果:

重载就相当于的我们为了一次性射中多个目标,所以一次性射出了很多箭
重写就相当于我们对于之前的箭矢进行了针对性的改进,然后射出去这跟改进后的箭矢

| 区别 |
重写(override)
|
重载(override)
|
| 参数列表 | 不能修改 | 必须修改 |
| 返回类型 | 不能修改(除非构成父子关系) | 可以修改 |
| 访问限定修饰符 | 可以降低限制但不能提高限制 | 可以修改 |
俩种编程方法很相似,但是体现的编程思维是完全不同的
重载是属于静态绑定,编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法;而重写属于是动态绑定,在刚开始的时候,我们确实是调用的父类中的方法,然后在我们实现了重写后,编译器在调用的时候,就会自己去寻找合适的需要调用的方法