Java函数的重载和覆盖实现多态性
Java中实现多态性的两种方式:重载和覆盖。重载是指在同一个类中,定义多个方法名相同但参数列表不同的方法;覆盖是指在子类中重写父类中的方法。
重载的实现多态性
在Java中方法的重载可以实现多态性。方法的重载是指在同一个类中定义了多个同名方法,但是参数列表不同。这样在调用方法时,Java会自动根据参数的不同选取正确的方法进行调用。这样就可以让多个方法使用同一个方法名,让程序代码更加简洁易读。
重载方法的原则是:方法名相同,参数列表必须不同(参数个数、类型或顺序不同);返回值类型和访问修饰符可以不同。
例如:
public class TestOverload {
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
public static void main(String[] args) {
System.out.println(add(1, 2)); //输出3
System.out.println(add(1.2, 2.3)); //输出3.5
System.out.println(add(1.2, 2)); //编译错误,参数类型不匹配
}
}
在这个例子中,重载了两个add方法,一个参数列表为int类型,另一个参数列表为double类型。通过传入不同类型的参数,调用了不同的方法实现了多态性。
覆盖的实现多态性
Java中方法的覆盖也可以实现多态性。方法的覆盖是指子类中实现了与父类中已有的同名、同参数列表的方法,这时子类的方法覆盖了父类的方法。当调用该方法时,会优先调用子类中的方法进行处理。
覆盖方法的规则是:方法名、参数列表必须与父类中的方法相同;返回值类型必须与父类中的方法的返回值类型相同或是它的子类型;访问修饰符不能低于父类中的方法;抛出的异常类型必须与父类的异常类型相同或是父类异常类型的子类。
例如:
public class TestOverride {
static class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
static class Dog extends Animal {
public void move() {
System.out.println("狗可以跑和走");
}
}
public static void main(String args[]) {
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move();// 输出:动物可以移动
b.move();// 输出:狗可以跑和走
}
}
在这个例子中,Animal类定义了一个move方法,而Dog类继承了Animal类并且重写了move方法。当创建一个Animal类型的对象时,调用的是父类中的move方法;当创建一个Dog类型的对象时,调用的是子类中重写的move方法。在该例子中体现了Java中多态性的实现。
总结
在Java中,多态性是实现面向对象程序设计的重要特征。实现多态性的方式有两种:重载和覆盖。重载是指在同一个类中定义多个方法名相同但参数列表不同的方法;覆盖是指在子类中重写父类中的方法。无论采用哪种方式,多态性的实现都可以让程序更加简洁易读,减少了代码量,提高了程序的可维护性和可扩展性。
