在java中,覆盖(override)和重载(overload)这两个概念都很常见。虽然它们的名称相似,但是它们的含义是不同的。
覆盖(override)的含义是,在子类中定义一个与父类中同名同参数的方法,覆盖掉父类中的方法。子类对象在调用这个方法时,会优先调用子类中的方法。这个过程就是子类对父类方法的覆盖。具体实现方法是:在子类中定义一个与父类中同名同参数的方法,并且加上@Override注解。这个注解表示这个方法是在覆盖父类中的方法。
public class Animal { public void move() { System.out.println("Animal is moving"); } } public class Dog extends Animal { @Override public void move() { System.out.println("Dog is running"); } } public class Main { public static void main(String[] args) { Animal animal = new Animal(); animal.move(); // 输出 Animal is moving Dog dog = new Dog(); dog.move(); // 输出 Dog is running } }
重载(overload)的含义是,在同一个类中定义多个同名但参数不同的方法。Java编译器会根据方法的参数类型和个数自动判断调用哪一个方法。具体实现方法是:在同一个类中定义多个同名的方法,但参数的类型、数量、顺序不同。这样就可以实现方法的重载。
public class Calc { public int add(int a, int b) { return a + b; } public double add(double a, double b) { return a + b; } public String add(String a, String b) { return a + b; } } public class Main { public static void main(String[] args) { Calc calc = new Calc(); int result1 = calc.add(1, 2); // 调用 add(int a, int b) 方法 double result2 = calc.add(1.1, 2.2); // 调用 add(double a, double b) 方法 String result3 = calc.add("Hello", "World"); // 调用 add(String a, String b) 方法 } }
总结:Java中的覆盖和重载是实现多态的两个手段,可以让程序更加灵活和可扩展。