欢迎访问宙启技术站
智能推送

Java中函数重载和函数重写有何区别?

发布时间:2023-06-22 20:13:06

Java中的函数重载和函数重写是两种不同的概念,虽然它们都涉及到函数的表现形式的变化,但是它们的意义与用途各不相同。

函数重载(Overloading)

函数重载是指在同一个类中声明了多个相同名字的函数,但是这些函数的参数类型、数量或顺序不同。函数重载主要有两种形式:方法名相同,参数列表不同;方法名相同,参数列表相同,但是返回值类型不同。

例如:

public class Test{
   public void print(int n){
      System.out.println("我是整数类型的 " + n);
   }
   public void print(double n){
      System.out.println("我是浮点类型的 " + n);
   }
   public int print(int n, double m){
      System.out.println("我是整数浮点类型的 " + n + " " + m);
      return n;
   }
}

在上面的代码中,print()函数被重载了3次, 次函数的参数类型为int,第二次函数的参数类型为double,第三次函数的参数类型为int和double,返回值类型为int。

函数重载可以让程序更灵活,为不同的参数类型提供相同的函数处理,代码可读性更高,但需要注意,函数重载所要求的参数列表的类型、数量、顺序均必须不同,否则会编译错误。

函数重写(Overriding)

函数重写是指在继承关系中,子类对基类中已有的函数进行重新定义,使得函数的行为重新匹配子类的需求。函数重写的目的是为了让子类可以修改、增广或实现基类中已有的函数,使其满足子类特定的需要。

例如:

public class Animal{
   public void move(){
      System.out.println("动物可以移动");
   }
}

public class Dog extends Animal{
   public void move(){
      System.out.println("狗可以跑和走");
   }
}

在上面的代码中,Dog类继承了Animal类,并通过重写move()函数,重新定义了狗的移动方式。

函数重写通常发生在基类和子类之间,函数重写满足的条件如下:

- 重写函数的名称、返回类型和参数列表必须与被重写的基类函数的名称、返回类型和参数列表相同。

- 重写函数的访问修饰符不能低于被重写的基类函数的访问修饰符。

- 基类函数不可以被声明为final或static。

总结

- 函数重载是函数名称相同,参数列表不同,用于处理不同类型的数据。

- 函数重写是函数继承后,对父类中已有的函数进行重新定义,使得其更符合子类的特定需求。