0
0

クラスの継承とは

Posted at

継承

  • クラスが持っているメンバ(フィールドやメソッド)を別のクラスに引き継がせる。
  • 継承元のクラスをスーパークラス(または親クラス)、引き継いだクラスをサブクラス(または子クラス)
    (継承を使用しない例と使用する例のコードも記載されていてわかりやすかった参照元URL)
// 継承の書き方

子クラス extend 親クラス
実例

作成クラス3つ。

  1. Keisyo_Human1.java:人を表す親クラス
  2. Keisyo_Takada1.java:親クラスを継承する子クラス
  3. Keisyo_Main1.java:実行クラス

Keisyo_Human1.java

public class Keisyo_Human1 {
   
   // フィールドの宣言
   double weight; // 体重
   double height; // 身長
   
   // BMI計算メソッド 修飾子なし=同じパッケージ内であればアクセス可能
   double Bmi( double weight, double height) {
   	return this.weight / (this.height * this.height);
   }
}

Keisyo_Takada1.java

// 継承
public class Keisyo_Takada1 extends Keisyo_Human1 {
}

Keisyo_Main1

public class Keisyo_Main1 {
	public static void main(String[] args) {
		
		// Keisyo_Takada1クラスのオブジェクト生成
		Keisyo_Takada1 takada = new Keisyo_Takada1();
		
		// 体重を設定
		takada.weight = 100.0;
		// 身長を設定
		takada.height = 1.9;
		
		//BMIのメソッド呼び出し
		double bmi = takada.Bmi(takada.weight, takada.height);
		System.out.println("BMIは" + bmi);
	}

}

実行結果
スクリーンショット 2024-02-13 14.32.39.png

検証1 

継承なしの場合

//コンストラクタが必要になる


package text.section_17;

public class Keisyo_Human1 {
	
	// フィールドの宣言
	double weight; // 体重
	double height; // 身長
	
    // コンストラクタ
    public Keisyo_Human1(double weight, double height) {
        this.weight = weight;
        this.height = height;
    }
	
	// BMI計算メソッド 修飾子なし=
	double Bmi( ) {
		return this.weight / (this.height * this.height);
	}
}

Kidaというオブジェクトを生成

package text.section_17;

public class Keisho_Kida {

	public static void main(String[] args) {
		//オブジェクトの生成
		Keisyo_Human1 Kida = new Keisyo_Human1(70, 1.75);
		
//		// 体重と身長を設定
//		Kida.weight = 70.0; // 体重(kg)
//		Kida.height = 1.75; // 身長(m)
		
		// BMIを計算して表示
        double bmi = Kida.Bmi();
        System.out.println("BMI: " + bmi);//メソッドの呼び出し
	}

}

実行結果
問題なく実行はできた。
スクリーンショット 2024-02-13 15.21.35.png

検証2

継承だけを設定しているクラスKeisyo_Takada1.javaがなく、
クラスの設定をしているKeisyo_Human1.javaに変更を加えない。そして、
同じクラス内に、継承とオブジェクトの生成・メソッドの実行を記述した場合。
→問題なく同じ実行結果が得られる。
スクリーンショット 2024-02-13 14.43.42.png
実行結果
スクリーンショット 2024-02-13 14.45.00.png

継承の使いどころとは?
例えば、女性or男性などの条件分岐を使う表示が必要な場合は、条件分岐ではなく継承でも良いのか?
大規模な開発の場合は継承は使われることも多いが、個人での開発レベルだと素直に条件分岐で書いた方がわかりやすいとベテランのある方に教えていただきました。

参考にした記事

メソッドのオーバーライドとスーパー

オーバーライド

  • 子クラスで親クラスのメソッドを上書きすることができる
  • ただし、上書きできるのは引数名と処理だけ
  • メソッド名、戻り値の型、引数の数、引数の型は親クラスのメソッドと同じにする必要がある

スーパー

  • 親クラスのコンストラクタを呼び出すことができる
  • 自身のフィード変数を呼び出すのはthisに対して、継承元の値を呼び出すのがsuper

スクリーンショット 2024-02-14 8.45.58.png
逆に、this("Kato");にすると70.0が表示される。

多態性(ポリモーフィズム)

abstractの親を2つのクラスが継承し、
それぞれoutputメソッドで引数をKato、もう一方はTanakaと設定をする。
その後、別クラスでそれぞれが親クラスからオブジェクトを生成。
そしてメソッドを呼び出した結果、オブジェクトごとに別の結果を表示させることができる。
スクリーンショット 2024-02-14 9.27.10.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0