java重载与重写的区别是什么
原创Java重载与重写的区别
Java中的重载(Overloading)与重写(Overriding)是两个频繁被提及的概念,虽然它们在字面上看起来非常相似,但实际上它们有着本质的区别。本文将通过具体的示例来阐述这两者的不同之处。
1. 重载(Overloading)
重载是指在同一个类中,有多个方法具有相同的名字,但它们的参数列表不同(参数的数量、类型或者参数的顺序不同)。编译器会选用方法签名(方法名称加参数类型)来区分这些方法。
下面通过一个明了的Java代码示例来演示重载:
public class Calculator {
// 方法1:加法
public int add(int a, int b) {
return a + b;
}
// 方法2:加法,参数数量不同
public int add(int a, int b, int c) {
return a + b + c;
}
// 方法3:加法,参数类型不同
public double add(double a, double b) {
return a + b;
}
}
2. 重写(Overriding)
重写是指子类有一个与父类方法签名完全相同的方法。当子类对象调用该方法时,会调用子类中定义的方法,而不是父类中的方法。这就实现了对父类方法的“覆盖”。
下面通过一个Java代码示例来演示重写:
class Animal {
// Animal 类的 move 方法
public void move() {
System.out.println("Animals can move");
}
}
class Dog extends Animal {
// Dog 类重写 Animal 类的 move 方法
public void move() {
System.out.println("Dogs can walk and run");
}
}
class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal 对象
Animal b = new Dog(); // Dog 对象,但是被当作 Animal 类型
a.move(); // 输出: Animals can move
b.move(); // 输出: Dogs can walk and run,调用的是 Dog 类的 move 方法
}
}
3. 重载与重写的区别
- 重载(Overloading):
- 在同一个类中出现。
- 方法名相同,参数列表不同。
- 编译时多态(编译器选用方法签名决定调用哪个方法)。
- 重写(Overriding):
- 在继承关系的子类中出现。
- 方法名和参数列表完全相同。
- 运行时多态(JVM在运行时决定调用哪个方法)。
懂得这两者的区别对于编写清晰可见和可维护的Java代码来说非常重要。