Javaにおけるオーバーライドとオーバーロード

はじめに

オーバーライドとオーバーロードは、Javaプログラミングの中核的な概念です。これらは、Javaプログラムにおいてポリモーフィズムを実現する方法です。ポリモーフィズムは、OOPSの概念の一つです。

Overriding versus overloading in Java

スーパークラスと子クラスでメソッドのシグネチャ(名前とパラメータ)が同じ場合、それはオーバーライドと呼ばれます。同じクラス内の2つ以上のメソッドが同じ名前で異なるパラメータを持っている場合、それはオーバーロードと呼ばれます。

オーバーライドとオーバーロードを比較する

Overriding Overloading
Implements “runtime polymorphism” Implements “compile time polymorphism”
The method call is determined at runtime based on the object type The method call is determined at compile time
Occurs between superclass and subclass Occurs between the methods in the same class
Have the same signature (name and method arguments) Have the same name, but the parameters are different
On error, the effect will be visible at runtime On error, it can be caught at compile time

オーバーライドとオーバーロードの例

以下には、Javaプログラム内でのオーバーロードとオーバーライドの例があります。

package com.scdev.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パラメーターは、子クラスの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はオーバーライドされます。ライン11とライン28。

public class Processor {

    public void process(int[] ints) { /* ... */ }

}

/* ... */

class MathProcessor extends Processor {

    @Override
    public void process(Object[] objs) { /* ... */ }

}

オーバーローディング

Processorクラスでprocess()メソッドがオーバーロードされています。7行目、11行目、15行目:

public class Processor {

    public void process(int i, int j) { /* ... */ }

    public void process(int[] ints) { /* ... */ }

    public void process(Object[] objs) { /* ... */ }

}

結論

この記事では、Javaにおけるオーバーライドとオーバーロードについて説明しました。オーバーライドは、スーパークラスとサブクラスでメソッドの署名が同じ場合に発生します。オーバーロードは、同じクラス内の2つ以上のメソッドが同じ名前を持っているが、パラメータが異なる場合に発生します。

コメントを残す 0

Your email address will not be published. Required fields are marked *