【Java】クラスの継承とメソッドのオーバーライドのやり方

■クラスの継承

▼クラスの継承
既存のクラスに機能を付け加えて、新たなクラスを定義すること。
継承元のクラスをスーパークラスと呼び、継承先のクラスをサブクラスと呼ぶ。

▼クラスの継承の書き方

class スーパークラス名 {
    スーパークラスの処理
}

class サブクラス名 extends スーパークラス名 {
    サブクラスの処理
}

■メソッドのオーバーライド

継承元のクラス(スーパークラス)から継承したメソッドの処理内容が、継承先のクラス(サブクラス)の用途に合わない場合、処理の内容をオーバーライド(上書き)することができる。
オーバーライドする場合は、スーパークラスのメソッドと同じ名前のメソッドをサブクラスで定義する。

▼オーバーライドの書き方

class スーパークラス名 {
    public void hoge() {
        メソッドの処理
    }
}

class サブクラス名 extends スーパークラス名 {
        public void hoge() {
        メソッドの処理
    }
}

■今回作成するプログラムの仕様

今回作成するプログラムは入力する値(文字列型と整数型)を表示するプログラムを作成する。

▼処理内容

・入力名と入力値を表示するクラス(スーパークラス)

▼メンバ変数
入力名の変数(文字列)
入力値の変数(整数)

▼入力した情報を出力するメソッド
入力名を表示
入力値を表示

▼コンストラクタ
入力名を設定
入力値を設定

・追加分の入力値を表示するクラス(サブクラス)

▼メンバ変数
追加分の入力値変数(整数値)

▼入力した情報を出力するメソッド(オーバーライド)
スーパークラスの入力した情報を出力するメソッドを実行する。
追加分の入力値を表示

▼コンストラクタ
スーパークラスのコンストラクタ呼び出し
追加分の入力値を設定

・メイン処理

スーパークラスをインスタンスし、入力した情報を出力するメソッド(オーバーライド)を実行する。

■サンプルコード

// 入力名と入力値を表示するクラス(スーパークラス)
class ShowNum{
	// メンバ変数定義
	protected String name;		// 入力名の変数
	protected int num;			// 入力値の変数
	
	// 入力した情報を出力するメソッド
	public void show() {
		System.out.println("入力名:" + name);
		System.out.println("入力値:" + num);
	}
	
	// コンストラクタ
	public ShowNum(String input_name, int input_num) {
		this.name = input_name;
		this.num = input_num;
	}
}


// 追加分の入力値を表示するクラス(サブクラス:ShowNumクラスを継承)
class ExShowNum extends ShowNum {
	// メンバ変数定義
	private int next_num;		// 追加分の入力値変数

	// 入力した情報を出力するメソッド
	public void show() {
		super.show();
		System.out.println("入力値(追加分):" + next_num);
	}
	
	// コンストラクタ
	public ExShowNum(String input_name, int input_num, int input_next_num) {
		super(input_name, input_num);		// super()でスーパークラスのコンストラクタ呼び出し
		this.next_num = input_next_num;
	}
}

public class Sample{
	
	public static void main(String[] args) {
		// ExShowNumクラスをインスタンス
		ExShowNum num1 = new ExShowNum("hoge", 2, 4);
		num1.show();
	}

}

・補足事項

▼protected
他のクラスからは使用できないが、継承先のクラス(サブクラス)では利用できる。

▼super()
継承元(スーパークラス)の処理を使用する場合はsuper()を使用する。

■実行結果

入力名:hoge
入力値:2
入力値(追加分):4

タイトルとURLをコピーしました