Java ポリモフィズムのサンプル(多態性)

Javaのポリモフィズムのサンプルです。

目次

サンプル ポリモフィズムとは
  ポリモフィズムのサンプル
  コレクションを使用

ポリモフィズム

  • メソッドで、使用するクラスのインスタンスによって処理を変えることができます。
  • 複数のクラスで同じインターフェースを実装します。
    →あるメソッドの引数のデータ型にインターフェースを指定した場合、
    メソッドの引数は、異なるクラスのインスタンスを指定できるようになります。
    引き渡すインスタンスによって処理の内容が変えることができます。
  • 多態性とも呼ばれます。

ポリモフィズムのサンプル

package test1;
 
//インターフェース
interface InterfaceA{
	void print1();
}
// Class1
class Class1 implements InterfaceA { //同じインターフェースを実装
	@Override
	public void print1() {
		System.out.println("123");
	}
}
//Class2
class Class2 implements InterfaceA { //同じインターフェースを実装
	@Override
	public void print1() {
		System.out.println("456");
	}
}
public class Test1 {
	public static void main(String[] args) {

		Class1 c1 = new Class1();
		Class2 c2 = new Class2();
		
		exe01(c1); // 123 同じメソッドだが結果は異なる
		exe01(c2); // 456 同じメソッドだが結果は異なる
	}
	// 同じインターフェース型でアクセスできる
	static void exe01(InterfaceA c){ // 引数の型はインターフェース型
		c.print1();
	}
}

27,28行目は同じexe01メソッドを実行していますが引数が異なるため出力される内容は異なります。
31行目の引数の型はインターフェース型になっています。

コレクションを使用

上記のコードは、コレクションを使用して書き換えることができます。

package test1;

import java.util.ArrayList;

//インターフェース
interface InterfaceA{
	void print1();
}
// Class1
class Class1 implements InterfaceA { //同じインターフェースを実装
	@Override
	public void print1() {
		System.out.println("123");
	}
}
//Class2
class Class2 implements InterfaceA { //同じインターフェースを実装
	@Override
	public void print1() {
		System.out.println("456");
	}
}
public class Test1 {
	public static void main(String[] args) {
		
		ArrayList<InterfaceA> a = new ArrayList<>();
		a.add(new Class1()); //インスタンスを追加
		a.add(new Class2()); //インスタンスを追加
		
		for(InterfaceA ifa : a) { //データ型はインターフェース
			exe01(ifa); // 123 456
		}
	}
	// 同じインターフェース型でアクセスできる
	static void exe01(InterfaceA c){ //データ型はインターフェース
		c.print1();
	}
}

27,28行目は、インスタンスをコレクションのリストに追加しています。
30~32行目は、拡張for文でループを回してメソッドを実行しています。同じインターフェースの型なので実行できます。

関連の記事

Java インターフェースのサンプル(interface)
Java 抽象クラスと抽象メソッドのサンプル(abstract)

△上に戻る