java多态重载和重写的区别
时间: 2024-12-06 20:14:56 浏览: 14
C#中多态、重载、重写区别分析
多态是面向对象编程中的一个重要概念,而重载(Overloading)和重写(Overriding)是实现多态性的两种不同方式。它们在Java中有明显的区别:
1. **方法重载(Overloading)**:
- **定义**:在同一个类中定义多个方法,这些方法具有相同的名字但参数不同。
- **参数列表**:参数的类型、数量或顺序必须不同。
- **返回类型**:可以相同也可以不同。
- **访问修饰符**:可以不同。
- **示例**:
```java
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
}
```
2. **方法重写(Overriding)**:
- **定义**:在子类中重新定义父类中的方法。
- **参数列表**:必须与父类方法相同。
- **返回类型**:必须与父类方法相同或为其子类型。
- **访问修饰符**:不能比父类方法的访问修饰符更严格。
- **示例**:
```java
class Animal {
void makeSound() {
System.out.println("Some generic animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
```
**主要区别**:
- **作用域**:重载是在同一个类中,而重写是在父子类之间。
- **参数列表**:重载的参数列表必须不同,重写的参数列表必须相同。
- **返回类型**:重载的返回类型可以不同,重写的返回类型必须相同或为其子类型。
- **访问修饰符**:重载的访问修饰符可以不同,重写的访问修饰符不能更严格。
阅读全文