Java函数的重载和重写:实现函数多态性的两种方式
发布时间:2023-08-04 09:14:55
Java函数的重载和重写是实现函数多态性的两种方式。函数多态性是指同一个函数名可以有不同的参数列表或不同的实现方式。
函数的重载(Overloading)
函数的重载是指在同一个类中,可以有多个同名但参数列表不同的函数。通过重载可以方便地用相同的函数名处理不同类型或不同个数的参数。
重载的规则如下:
1. 函数名相同。
2. 参数列表必须不同,可以是参数个数不同或者参数类型不同。
3. 返回类型可以相同也可以不同。
4. 重载函数可以有不同的修饰符。
重载的示例:
public class OverloadingExample {
public void print(String s) {
System.out.println("String: " + s);
}
public void print(int i) {
System.out.println("Integer: " + i);
}
public void print(double d) {
System.out.println("Double: " + d);
}
}
重写(Overriding)
函数的重写是指在子类中重新定义父类中已有的函数。子类中重新定义的函数具有相同的函数名、参数列表和返回类型。
重写的规则如下:
1. 函数名、参数列表和返回类型必须跟父类中被重写的函数一致。
2. 访问修饰符不能严格小于父类中被重写的函数的访问修饰符,可以更大或相等。
3. 重写函数不能抛出新的检查异常或者比父类函数声明的检查异常更广泛。
4. 静态函数不能被重写。
重写的示例:
public class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
public class Dog extends Animal {
public void sound() {
System.out.println("Dog barks");
}
}
重载和重写的区别:
1. 重载是在同一个类中,通过函数名和参数列表的不同来实现多态性;而重写是在继承关系中,子类重新定义父类中已有的函数。
2. 重载是通过编译器静态绑定确定调用的函数;而重写是在运行时动态绑定确定调用的函数。
3. 重载可以改变函数的参数列表,返回类型和修饰符;而重写必须保持函数名、参数列表和返回类型一致,并且访问修饰符不能严格小于父类中被重写的函数的修饰符。
4. 重载是编译时多态;而重写是运行时多态。
通过重载和重写,Java提供了两种实现多态性的方式,可以根据不同的需求选择合适的方式。重载适合处理不同类型或不同个数的参数,而重写适合实现子类对父类函数的重新定义。
