1 问题
在Java中,方法存在着重写和重载两种方式,它们的区别是什么?
2 方法
2.1方法的重写
在Java中,重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。方法的重写具有以下特点:
1.重写是指子类定义了与父类具有相同名称、参数列表和返回类型的方法,并且子类方法的访问修饰符不能比父类方法更严格。
2.重写用于实现多态性,子类对象可以以父类对象的形式调用被重写的方法,实现运行时动态绑定。
3.重写要求子类方法的签名(名称、参数列表和返回类型)与父类方法完全一致。
4.重写可以改变方法的实现逻辑,但方法的基本行为和功能应该保持一致。
代码清单1为方法重写的一个简单示例,父类Animal有一个makeSound()的方法,子类Dog继承了父类Animal,并且Dog类也有makeSound()方法,它与父类Animal的方法具有相同的名称、参数列表和返回类型,使得Dog类在调用该方法时会使用自己的实现而不是父类Animal的实现。所以,makeSound()方法在子类中被重写。
代码清单 1
public class Animal {
public void makeSound() { System.out.println("Animal is making a sound"); } } public class Dog extends Animal{ // 方法的重写(Override) @Override public void makeSound() { System.out.println("Dog is barking"); } // 实例化父类和子类的对象 public static void main(String[] args) { Animal animal = new Animal(); Dog dog= new Dog(); animal.makeSound(); dog.makeSound(); } } /* 输出: Animal is making a sound Dog is barking */ |
2.2方法的重载
Java中,重载(Overload)指的是在同一个类中声明多个方法,它们拥有相同的名称,但是参数类型或数量不同。方法的重载具有以下特点:
1.重载是指在一个类中定义了多个具有相同名称但参数列表不同的方法。
2.重载用于实现方法的多态性,通过提供不同的方法参数组合,可以根据传入的参数类型和个数来选择合适的方法进行调用。
3.重载要求方法的名称相同,但参数列表必须不同(参数类型、个数或顺序)。
4.重载可以改变方法的参数类型和个数,但返回类型和访问修饰符不会影响方法的重载。
代码清单2为方法重载的一个简单示例,Calculator类定义了两个名为add的方法,它们的参数列表分别是(int,int)和(double,double)。示例化对象后,可以根据传入的参数类型来选择合适的方法进行调用,这就是方法的重载,方法的重载可以提高代码的复用性和可读性。
代码清单2
public class Calculator {
// int类型参数 public int add(int a, int b) { return a + b; } // double类型参数 public double add(double a, double b) { return a + b; } public static void main(String[] args) { Calculator calculator = new Calculator(); int int_result = calculator.add(1,2); double double_result = calculator.add(1.2,1.5); System.out.printf("%s\n%s",int_result,double_result); } } /* 输出: 3 2.7 */ |
3 结语
本文介绍了Java中方法重写和重载的区别。
重写是指子类定义了与父类具有相同名称、参数列表和返回类型的方法,并且子类方法的访问修饰符不能比父类方法更严格。重写用于实现多态性,子类对象可以以父类对象的形式调用被重写的方法,实现运行时动态绑定。重写要求子类方法的签名(名称、参数列表和返回类型)与父类方法完全一致。重写可以改变方法的实现逻辑,但方法的基本行为和功能应该保持一致。
重载是指在一个类中定义了多个具有相同名称但参数列表不同的方法。重载用于实现方法的多态性,通过提供不同的方法参数组合,可以根据传入的参数类型和个数来选择合适的方法进行调用。重载要求方法的名称相同,但参数列表必须不同(参数类型、个数或顺序)。重载可以改变方法的参数类型和个数,但返回类型和访问修饰符不会影响方法的重载。
重写和重载都是实现方法的多态性的方式,但它们的实现方式和应用场景有所不同。重写用于实现继承中的多态性,而重载用于实现同一个类中的方法多态性。在实际开发中,应该根据具体情况选择使用重写或重载,以实现代码的灵活性和可维护性。