重载和重写的区别是什么?代码说明
时间: 2024-10-17 11:05:10 浏览: 40
重载和重写是面向对象编程中的两个重要概念,它们的区别如下:
重载(overloading)是指在一个类中定义多个同名的方法,但这些方法的参数列表必须不同(参数类型、个数或顺序不同),返回类型可以相同也可以不同。在调用时,编译器会根据传入的参数类型和个数来确定调用哪个方法。
重写(overriding)是指在派生类中重新实现基类中的虚函数,即函数名和参数都一样,但函数的实现体不同。重写的目的是为了实现多态性,即在运行时根据对象的实际类型来调用相应的函数。
下面是一个Java代码示例,演示了重载和重写的用法:
```
public class Animal {
public void makeSound() {
System.out.println("Animal is making sound.");
}
}
public class Dog extends Animal {
public void makeSound() {
System.out.println("Dog is barking.");
}
public void makeSound(String message) {
System.out.println("Dog is barking: " + message);
}
}
public class Main {
public static void main(String[] args) {
Animal animal = new Animal();
animal.makeSound(); // 输出:Animal is making sound.
Dog dog = new Dog();
dog.makeSound(); // 输出:Dog is barking.
dog.makeSound("Hello"); // 输出:Dog is barking: Hello
Animal animal2 = new Dog();
animal2.makeSound(); // 输出:Dog is barking.
}
}
```
在上面的代码中,Animal类定义了一个makeSound方法,Dog类继承了Animal类并重写了makeSound方法。此外,Dog类还定义了一个重载的makeSound方法,它接受一个字符串参数。在Main类中,我们创建了一个Animal对象和一个Dog对象,并分别调用它们的makeSound方法。我们还创建了一个Animal类型的引用指向一个Dog对象,并调用它的makeSound方法,这里会发生多态性。
阅读全文