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

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

目次

ポリモフィズム

  • 複数のオブジェクトに同じメソッド名がある場合で、メソッドを実行するとそれぞれ異なる動きをします。
  • 複数のクラスで同じインターフェースを実装した場合、共通のメソッドを持つことになります。
    →メソッドを呼び出す際は、同じインターフェース型とメソッドになります。
    →メソッドが実行する内容は、オーバーライドされたメソッドによりそれぞれ異なります。

コード

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

8,15行目の2つのクラスは4行目のインターフェースを実装しています。
24行目は、8行目のClass1クラスをインスタンス化しています。
25行目は、15行目のClass2クラスをインスタンス化しています。
27,28行目は同じexe01メソッドを実行していますが出力される内容は異なります。
31行目の引数の型はインターフェース型になっています。

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

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();
	}
}

関連の記事

Java クラスのサンプル
Java コンストラクタのサンプル
Java クラスの変数のサンプル(メンバー変数/ローカル変数)
Java 変数の型変換のサンプル(基本型と参照型)
Java インスタンスの型を調べるサンプル(instanceof)
Java クラスのthisのサンプル
Java インターフェースのサンプル
Java 抽象メソッドと抽象クラスのサンプル(abstract)
Java シングルトンのサンプル
Java staticメソッドとstatic変数のサンプル

 はまったらエンジニア特化型Q&Aサイト
【teratail(テラテイル)】で質問しましょう!


△上に戻る