实现Java函数重载与重写的方法
Java中的函数重载和重写是Java程序中常用的特性,可以增强代码的复用性和可读性。两者虽然都是方法重复利用的策略,但它们是不同的概念,因为重载的方法是编译时多态,而重写的方法是运行时多态。在本文中,我们将探讨如何在Java中实现函数重载和重写的方法。
一、Java函数重载
Java中的函数重载是指一个类中可以有多个同名的方法,但是它们的参数类型或者数量不同,这样编译器会根据不同的参数类型和数量来区分不同的函数。在Java中,重载遵循以下规则:
1. 重载方法的方法名相同。
2. 重载方法的参数列表必须不同。
3. 重载方法的返回类型可以不同,但是不能仅仅是返回类型不同。
4. 重载方法的访问修饰符可以不同。
5. 重载方法不能以参数区别不明确;即不能有两个参数类型完全相同的方法。
下面是一个Java函数重载的例子:
public class OverloadDemo {
public int add(int x, int y) {
return x + y;
}
public float add(float x, float y) {
return x + y;
}
public double add(double x, double y) {
return x + y;
}
}
在这个例子中,我们定义了三个同名的函数add,但是它们的参数类型分别是整型、浮点数和双精度浮点数,这就是Java中的函数重载。
二、Java函数重写
Java中的函数重写是指子类中的方法与父类中的方法具有相同的名称、参数列表和返回值类型,但是实现方式不同。子类重写父类方法时,方法必须具有相同的方法签名,这是Java方法重写的限制。在Java中,方法重写通常用于实现运行时多态。下面是Java方法重写的规则:
1. 子类方法必须与父类方法具有相同的方法名称和返回值类型。
2. 子类方法的权限修饰符不得低于父类方法的权限修饰符。
3. 子类方法的参数列表必须与父类方法的完全相同。
4. 子类方法抛出的异常类型必须与父类方法所抛出的异常类型相同或是它的子类。
下面是一个Java方法重写的例子:
class Animal {
public void move() {
System.out.println("动物可以移动");
}
}
class Dog extends Animal {
public void move() {
super.move(); // 子类调用父类的方法
System.out.println("狗可以跑和走");
}
}
public class TestDog {
public static void main(String[] args) {
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象
a.move(); // 执行 Animal 类的方法
b.move(); // 执行 Dog 类的方法
}
}
在这个例子中,我们定义一个Animal类和一个Dog类。Dog类继承自Animal类,并重写了它的move方法,在子类方法中我们调用了父类的move方法,然后输出了狗特有的行为。
总结:
Java函数重载和重写是Java程序中常用的函数复用特性,上述两个特性实现的本质是不同的,重载是编译期绑定的多态,重写是运行时绑定的多态;但是这两种方式都可以提高Java程序的简洁性和复用性。需要注意的是,重载方法和重写方法的方法名和参数限制都有一定的规则,需要严格遵守。
