java重载与重写的区别是什么

原创
ithorizon 8个月前 (08-31) 阅读数 104 #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代码来说非常重要。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Java


热门