Bootstrap

什么是方法的重载?什么是方法重写?

Java中的方法重载和方法重写是面向对象编程中常用的概念。方法重载是指在一个类中可以定义多个同名但参数列表不同的方法,而方法重写是指在子类中定义与父类中同名、参数列表相同、返回值类型相同或者是其子类的方法。接下来,本文将对这两个概念进行详细解释,并给出代码和例子以说明其用法和效果。
 方法重载
 方法重载是指在一个类中可以定义多个同名但参数列表不同的方法。具体来说,方法重载要求方法的方法名相同,但是参数列表必须不同。参数列表可以是参数的数据类型、个数和顺序。在Java中,方法重载是静态绑定的,即在编译时就确定了调用哪个方法。
 下面是一个例子,展示了方法重载的用法:

public class Calculator {
    public int add(int a, int b) { // 第一个add方法,参数为两个int型数值
        return a + b;
    }
     public double add(double a, double b) { // 第二个add方法,参数为两个double型数值
        return a + b;
    }
     public int add(int a, int b, int c) { // 第三个add方法,参数为三个int型数值
        return a + b + c;
    }
     public void print() { // 带无参数的print方法
        System.out.println("Hello World!");
    }
     public void print(int a) { // 带一个int型参数的print方法
        System.out.println("The number is " + a);
    }
     public void print(double a) { // 带一个double型参数的print方法
        System.out.println("The number is " + a);
    }
}
 public class Main {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
         // 调用三个add方法
        int result1 = calculator.add(1, 2);
        double result2 = calculator.add(3.4, 5.6);
        int result3 = calculator.add(1, 2, 3);
        System.out.println("result1 = " + result1);
        System.out.println("result2 = " + result2);
        System.out.println("result3 = " + result3);
         // 调用三个print方法
        calculator.print();
        calculator.print(100);
        calculator.print(3.14);
    }
}


在这个例子中,我们定义了一个Calculator类,其中包含了三个add方法和三个print方法。这些方法分别有不同的参数列表,但是方法名相同。在main方法中,我们创建一个Calculator对象,然后用不同的参数调用了这些方法。在计算add方法的结果时,Java编识器会根据参数列表的不同选择合适的方法,即使这些方法的方法名相同。
 方法重写
 方法重写是指在子类中定义与父类中同名、参数列表相同、返回值类型相同或者是其子类的方法。方法重写是动态绑定的,即在运行时才确定调用哪个方法。
 下面是一个例子,展示了方法重写的用法:

public class Animal {
    public void eat() {
        System.out.println("Animal is eating.");
    }
}
 public class Dog extends Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating.");
    }
}
 public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cat is eating.");
    }
}
 public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Animal();
        Animal animal2 = new Dog();
        Animal animal3 = new Cat();
         animal1.eat();
        animal2.eat();
        animal3.eat();
    }
}


在这个例子中,我们定义了一个Animal类,其中包含了一个eat方法。然后我们定义了两个子类:Dog和Cat,它们都继承自Animal类,并重写了eat方法。在Main方法中,我们创建了一个Animal对象animal1,一个Dog对象animal2和一个Cat对象animal3,然后分别调用它们的eat方法。由于animal2和animal3都是Animal类型的对象,但是实际上分别指向了Dog和Cat对象,所以调用它们的eat方法时会分别调用Dog和Cat类中的eat方法,而不是Animal类中的eat方法。
 总结
 方法重载和方法重写都是面向对象编程中常用的概念。方法重载是指在一个类中可以定义多个同名但参数列表不同的方法,而方法重写是指在子类中定义与父类中同名、参数列表相同、返回值类型相同或者是其子类的方法。方法重载是静态绑定的,即在编译时就确定了调用哪个方法;方法重写是动态绑定的,即在运行时才确定调用哪个方法。两者结合使用可以提高代码的复用性和可读性。

;