043-抽象クラス-抽象クラスの配列 【新人エンジニアが最初に覚えたい100のJava文法】

ユーチューブ動画

抽象クラスの配列について解説します。

ソースコード

public class MainClass {
	public static void main(String[] args) {
		Product[] productList = { new Printer("Printer",15000,26), new Computer("Computer",80000,3.9) };
		for(Product product: productList){
			product.showData();
		}
	}
}
abstract class Product {
	private String productName;
	private int price;
	public Product(String productName, int price) {
		this.productName = productName;
		this.price = price;
	}
	public abstract void showData();
}
class Printer extends Product {
	private int printSpeed;
	public Printer(String productName, int price, int printSpeed) {
		super(productName, price);
		this.printSpeed = printSpeed;
	}
	public void showData() {
		System.out.println(this.printSpeed);
	}
}
class Computer extends Product {
	private double clockFeq;
	public Computer(String productName, int price, double clockFeq) {
		super(productName, price);
		this.clockFeq = clockFeq;
	}
	public void showData() {
		System.out.println(this.clockFeq);
	}
}

解説

抽象クラスの配列について解説します。

以前の動画(042-抽象クラス-オーバーライドとポリモーフィズム)でご紹介したオーバーライドとポリモーフィズムではメソッド名が同じでも振る舞いを変えることが出来ることを解説しました。

今回の動画では、そんなオーバーライドやポリモーフィズムの利点の合わせ技といった形になっています。

ポイントを復習しておきましょう。

サブクラスのインスタンスは、スーパークラスの変数に代入できるという点です。

これを思い出してください。

すると、ご覧のように、スーパークラス型の配列として、サブクラスのインスタンスを格納することができます。

配列ができたら、あとはこっちのものです。

拡張for文などを使って、オーバーライドされたメソッドを呼び出すと、ポリモーフィズムが実現されます。

つまり、呼び出したインスタンスの種類に応じた振る舞いを実行できます

実行結果は変わりません。

いまは、2つのだけのインスタンスですが、数多くのインスタンスがあり、

種類によって、振る舞いを分けなければいけないときに、活用が期待できます。

整理すると、スーパークラス型をうまく使うこと、

ポリモーフィズムを活用することを、

合わせると、コード量を削減できるということです。

なかなか難しいトピックですが、イメージができたでしょうか?

いろいろな説明を聞くと、また理解が深まります。

ぜひ前に進みましょう。

以上、抽象クラスの配列について解説しました。

このサンプルコードをJavaタッチタイプゲームとして遊ぶことができます。