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タッチタイプゲームとして遊ぶことができます。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。