Java中函数的重载和覆盖:多态性
发布时间:2023-06-18 00:31:36
Java是一门基于面向对象编程的高级编程语言,它对多态性的支持非常好,且多态性是Java面向对象编程的基石之一。Java中函数的重载和覆盖就是多态性的两种体现方式。
1. 函数的重载
函数的重载是指在同一个类中,定义了多个同名函数,但它们的参数列表不同,即参数类型、参数个数或参数顺序有所不同。Java编译器会根据调用函数时提供的参数列表,自动匹配到相应的函数,从而实现了函数的重载。
举个例子:
public class OverloadExample {
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;
}
}
其中,这三个函数都叫做add函数,但它们的参数列表不同,这就是函数的重载。
2. 函数的覆盖
函数的覆盖是指子类定义了一个与父类某个函数具有相同名称、返回类型和参数列表的函数,这个新函数会覆盖父类中原有的函数。当通过子类的实例对象调用这个函数时,会优先调用子类中的函数而不是父类中的函数,这就是函数的覆盖,也称为函数的重写。
举个例子:
public class OverrideExample {
public static void main(String[] args) {
Father father = new Father();
System.out.println(father.greeting()); //输出:Hello from Father
Son son = new Son();
System.out.println(son.greeting()); //输出:Hello from Son
}
}
class Father {
public String greeting() {
return "Hello from Father";
}
}
class Son extends Father {
@Override
public String greeting() {
return "Hello from Son";
}
}
在这个例子中,Father类中定义了一个greeting函数,返回“Hello from Father”,Son类继承自Father类,并覆盖了greeting函数,返回“Hello from Son”。当通过Father对象调用greeting函数时,会输出“Hello from Father”。但是通过Son对象调用greeting函数时,却输出了“Hello from Son”。这就是因为greeting函数被覆盖了,父类中的函数被子类中的函数所替代。
总的来说,Java中的多态性可以通过函数的重载和覆盖这两种方式来体现。函数的重载是指在同一个类中,定义了多个同名函数,但它们的参数列表不同。函数的覆盖则是指子类定义了一个与父类某个函数具有相同名称、返回类型和参数列表的函数,这个新函数会覆盖父类中原有的函数。函数的重载和覆盖都是Java对多态性的支持方式之一。
