Java 中的覆盖与重载
介绍
覆盖和重载是 Java 编程中的核心概念。它们是在我们的 Java 程序中实现多态性的方法。多态性是OOPS 概念之一。
当超类和子类中的方法签名(名称和参数)相同时,称为覆盖。当同一个类中两个或多个方法具有相同的名称但不同的参数时,称为重载。
比较覆盖和重载
覆盖 | 重载 |
---|---|
实现“运行时多态性” | 实现“编译时多态性” |
方法调用在运行时根据对象类型确定 | 方法调用在编译时确定 |
发生在超类和子类之间 | 发生在同一类中的方法之间 |
具有相同的签名(名称和方法参数) | 名称相同,但参数不同 |
发生错误时,效果将在运行时可见 | 发生错误时,可以在编译时捕获 |
覆盖和重载示例
以下是 Java 程序中重载和重写的示例:
package com.journaldev.examples;
import java.util.Arrays;
public class Processor {
public void process(int i, int j) {
System.out.printf("Processing two integers:%d, %d", i, j);
}
public void process(int[] ints) {
System.out.println("Adding integer array:" + Arrays.toString(ints));
}
public void process(Object[] objs) {
System.out.println("Adding integer array:" + Arrays.toString(objs));
}
}
class MathProcessor extends Processor {
@Override
public void process(int i, int j) {
System.out.println("Sum of integers is " + (i + j));
}
@Override
public void process(int[] ints) {
int sum = 0;
for (int i : ints) {
sum += i;
}
System.out.println("Sum of integer array elements is " + sum);
}
}
覆盖
中的方法process()
和int i, int j
参数Processor
在子类中被重写MathProcessor
。第7行和第23行:
public class Processor {
public void process(int i, int j) { /* ... */ }
}
/* ... */
class MathProcessor extends Processor {
@Override
public void process(int i, int j) { /* ... */ }
}
并且process()
方法和int[] ints
inProcessor
也在子类中被重写。第 11 行和第 28 行:
public class Processor {
public void process(int[] ints) { /* ... */ }
}
/* ... */
class MathProcessor extends Processor {
@Override
public void process(Object[] objs) { /* ... */ }
}
重载
该process()
方法在类中被重载Processor
。第 7、11 和 15 行:
public class Processor {
public void process(int i, int j) { /* ... */ }
public void process(int[] ints) { /* ... */ }
public void process(Object[] objs) { /* ... */ }
}
结论
在本文中,我们介绍了 Java 中的覆盖和重载。当超类和子类中的方法签名相同时,就会发生覆盖。当同一个类中的两个或多个方法具有相同的名称但不同的参数时,就会发生重载。