Java中的函数重载和函数重写
函数重载和函数重写是Java中重要的概念,两者虽然有着相似的名字,但其实是两个不同的概念。本文将分别介绍函数重载和函数重写,包括它们的定义、使用场景以及实例说明。
一、函数重载
函数重载是指在一个类中可以定义多个名称相同的方法,但参数列表必须不同。换句话说,函数重载要求同一个类中有多个函数名称相同的方法,但它们的参数列表不同,包括参数类型、参数个数或参数顺序等。
Java中的函数重载具有以下特点:
1.函数名称相同,但参数列表不同。
2.返回值类型可以相同也可以不同。
3.可以通过可变参数实现参数个数不同的函数重载。
4.函数的访问权限、修饰符及异常类型都可以不同。
函数重载的优点:
1.提高程序的易读性,便于区分不同的方法。
2.提高程序的灵活性,方便调用不同类型的方法。
3.简化程序设计,避免为了实现功能而新建多个方法。
下面我们来举例说明一下函数重载的使用场景:
public class FunctionOverload {
int add(int a, int b) {
return a + b;
}
int add(int a, int b, int c){
return a + b + c;
}
double add(double a, double b){
return a + b;
}
public static void main(String[] args) {
FunctionOverload fo = new FunctionOverload();
int r1 = fo.add(1, 2);
int r2 = fo.add(1, 2, 3);
double r3 = fo.add(1.0, 2.0);
System.out.println("r1:" + r1);
System.out.println("r2:" + r2);
System.out.println("r3:" + r3);
}
}
在以上代码中,我们定义了一个FunctionOverload类,其中重载了三个add()方法。 个add()方法参数为两个整型数,第二个add()方法参数为三个整型数,第三个add()方法参数为两个double类型数。在主函数中分别调用这三个add()方法,输出结果如下:
r1:3 r2:6 r3:3.0
根据输出结果可知,Java根据传入的参数类型和个数,确定了调用的哪一个add()方法,即实现了函数重载。
二、函数重写
函数重写(Override)指的是子类继承父类后,重新编写(覆盖)父类中声明的方法,使其根据子类的需要来执行。函数重写必须满足以下条件:
1.子类方法的名称、参数列表、返回值必须与父类中被覆盖的方法保持一致。
2.子类方法的访问级别不能低于父类中被覆盖的方法的访问级别。
3.子类方法不能抛出比父类中被覆盖的方法声明更多的异常。
函数重写的实现方法是在子类中定义一个与父类同名、同参数列表、同返回值类型的方法,用注解@override来声明这个方法是重写的父类方法。
下面我们来举例说明一下函数重写的使用场景:
public class Override{
public static void main(String[] args) {
Animal animal = new Animal();
Dog dog = new Dog();
animal.eat();
dog.eat();
Animal animal1 = new Dog();//多态
animal1.eat();
}
}
class Animal{
public void eat(){
System.out.println("animal eat");
}
}
class Dog extends Animal{
@Override
public void eat(){
System.out.println("dog eat");
}
}
在以上代码中,我们定义了一个Animal类和一个Dog类,其中Dog类从Animal类继承下来。我们先定义了一个Animal类的对象animal和一个Dog类的对象dog,然后分别输出它们的eat()方法。最后我们定义一个Animal类的变量animal1,将它指向Dog类的对象,进行多态调用,输出结果如下:
animal eat dog eat dog eat
根据输出结果可知,Java调用了Dog类中的eat()方法而非Animal类中的eat()方法,即实现了函数重写。
总之,函数重载和函数重写是Java中非常重要的概念,掌握函数重载和函数重写能够使我们更加灵活地运用Java进行开发。
