040-オブジェクトの拡張-継承とオーバーライド【新人エンジニアが最初に覚えたい100のJava文法】

Print Friendly, PDF & Email

ユーチューブ動画

継承とオーバーライドについて解説します。

ソースコード

class Product {
	private String productName;
	private int price;
	public Product(String productName, int price) {
		this.productName = productName;
		this.price = price;
	}
	public void showData() {
		System.out.println(this.productName);
		System.out.println(this.price);
	}
}
class Printer extends Product {
	private int printSpeed;
	public Printer(String productName, int price, int printSpeed) {
		super(productName, price);
		this.printSpeed = printSpeed;
	}
	public void showData() {
		super.showData();
		System.out.println(this.printSpeed);
	}
}

解説

継承とオーバーライドについて解説します。

共通したクラスを作るときには、継承を利用します。

継承するとサブクラスは、スーパークラスの内容を引き継ぎますが、場合によっては、一部だけを改良したいということもでてきます。

そのとき、今回ご紹介するオーバーライドを使うと、必要な差分だけをプログラミングすることができます

サンプルコードを確認しましょう。Productクラスを継承して、Printerクラスが定義されています。

Productクラスがスーパークラス、Printerクラスがサブクラスになります。

オーバーライドを成立させるためには、戻り値の型、メソッドの名前、引数リストを同じにします。

showDataメソッドに注目すると、同じになっています。つまり、showDataメソッドはオーバーライドしているといえます。

オーバーライドすると、メソッドの処理を上書きしてしまいます。

スーパークラスの処理も実行したいというときには、super.〜と記述することで、

スーパークラスのメソッドを呼び出すことができます。

PrinterクラスのインスタンスからshowDataメソッドを呼び出すと、

まずはサブクラスのshowDataメソッドが呼び出されて、super.showDataが実行されます。

メンバ変数のproductNameやpriceを出力すると、サブクラスのメソッドに戻ってきます。

サブクラスのメンバ変数であるprintSpeedを出力して、終了します。

サンプルコードにはありませんが、Productクラスを継承する別のクラスを定義しても、同じように差分をプログラミングすることができます。

ここではご覧のようなComputerクラスを作成しました。

メンバ変数に周波数が定義されています。

Printerクラスと同じようにshowDataメソッドをオーバーライドして、差分をプログラミングすることができます。

いかがでしたか?オーバーライドはメソッドの処理の上書きです。

戻り値の型・メソッドの名前・引数リストが同じとくれば、オーバーライドと覚えておきましょう。

以上、継承とオーバーライドについて解説しました。

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