Java中的重写(Overriding)与重载( Overloading)

时间:2020-02-23 14:37:23  来源:igfitidea点击:

在Java中覆盖vs重载

覆盖和重载是Java编程中的核心概念。
它们是在我们的Java程序中实现多态的方法。
多态是OOPS概念之一。

1.什么是重写(Overriding)和重载( Overloading)?

当同一类中的两个或者多个方法具有相同的名称但参数不同时,则称为"重载"。

如果方法签名(名称和参数)在超类和子类中相同,则称为"覆盖"。

2.覆盖与重载

  • 覆盖实现运行时多态,而重载实现编译时多态。

  • 方法覆盖发生在父类和子类之间。
    重载发生在同一类中的方法之间。

  • 覆盖方法具有相同的签名,即名称和方法参数相同。
    重载的方法名称相同,但参数不同。

  • 使用重载时,要在编译时确定要调用的方法。
    通过覆盖,可以在运行时根据对象类型确定方法调用。

  • 如果重载中断,则可能会在我们的程序中引起严重的问题,因为这种影响将在运行时可见。
    如果重载中断,则会出现编译时错误,并且很容易修复。

3.重载和重载示例

这是Java程序中重载和重写的示例。

package com.theitroad.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()方法在Processor类中重载。
然后,它们在子类MathProcessor中被覆盖。