方法重载和重写

Java方法的重载和重写是面向对象编程中的两个重要概念。两者都表示了方法的多态性,但是它们有着不同的含义和用法。

  • 重载(Overload)

    是指在一个类中,可以定义多个同名的方法,但是它们的参数列表必须不同。这些不同的参数列表可以是参数的数量不同,参数的类型不同,或者参数的顺序不同。当调用一个重载的方法时,Java会根据传入的参数的类型和数量,来决定具体调用哪个方法。重载的好处是可以使程序更加灵活,提高了代码的可读性和可维护性。

    例如:

    public void print(int num) {
        System.out.println("Print int: " + num);
    }
    
    public void print(double num) {
        System.out.println("Print double: " + num);
    }
    

    在上面的例子中,我们定义了两个重载的print方法,一个接受int类型的参数,另一个接受double类型的参数。当调用print方法时,Java会根据传入的参数类型来判断具体调用哪一个方法。

  • 重写(Override)

    是指子类对父类的方法进行重新实现。在面向对象的编程中,继承是指子类可以继承父类的属性和方法。有时候,子类可能需要对父类的某个方法进行特定的实现,这个时候可以使用方法的重写功能。方法的重写需要满足以下条件:子类的方法名、参数列表和返回值类型必须与父类的方法相同,访问修饰符不能比父类的方法更加严格。

    例如:

    public class Animal {
        public void sound() {
            System.out.println("Animal makes sound");
        }
    }
    
    public class Dog extends Animal {
        @Override
        public void sound() {
            System.out.println("Dog barks");
        }
    }
    

    在上面的例子中,我们定义了一个Animal类和一个Dog类,Dog类继承了Animal类。Animal类中有一个sound方法,它打印出“Animal makes sound”,而Dog类重写了这个方法,将其实现为打印“Dog barks”。当我们创建一个Dog对象并调用sound方法时,Java会调用Dog类中的sound方法,而不是Animal类中的sound方法。

  • 总结来说:重载是指在一个类中定义多个同名的方法,用于处理不同的参数类型和数量;而重写是指子类对父类的方法进行重新实现,用于实现特定的功能。通过使用重载和重写,我们可以实现更加灵活和可扩展的代码。