Java クラスの継承の仕組みとサンプル

目次

仕組み クラスの継承とは
  親クラスのコンストラクタを実行する(super)
  親クラスのメソッドを実行する(super)
  クラスの継承を禁止する(final)

クラスの継承とは

クラスがクラスを継承すると、継承先のクラスは継承元のクラスの機能を引き継ぎます。
継承先のクラスは、差分の機能を追加するだけでよくなります。

継承元のクラスのことを「基底クラス 」or 「親クラス 」or 「スーパークラス」といいます。
継承先のクラスのことを「派生クラス」 or「 子クラス」 or「 サブクラス」といいます。

継承は、オブジェクト指向の3大要素の一つです。(他はカプセル化とポリモーフィズム)

 

クラスの継承のサンプル

3行目は親クラスで、8行目は子クラスです。
8行目は、extendsで3行目のColor1クラスを継承しています。

package test1;

class Color1 {
	String getName1() {
		return "赤";
	}
}
class Color2 extends Color1 {
	String getName2() {
		return "青";
	}
}
public class Test1 {
	public static void main(String[] args) {
		Color2 c2 = new Color2();
		System.out.println(c2.getName1()); // 赤
		System.out.println(c2.getName2()); // 青
	}
}

16行目のgetName1メソッドは子クラスに存在しませんが実行できます。
→子クラスは、親クラスのメソッドを再実装しないで済んでいます。継承の利点です。

point

class  継承先のクラス名  extends  継承元のクラス名{
}
  • 継承先のクラスは、「extends」の後ろに継承元のクラス名を記述します。
  • 継承元のクラス(親クラス)は、1つのみ指定できます。
  • 継承したクラスをさらに継承することはできます。
  • extendsを省略した場合、Objectクラスを継承していることになります。
  • Javaのすべてのクラスは、Objectクラスを継承しています。
    →equalsメソッドなどのObjectクラスのメソッドを使用できます。
  • 以下は、OracleのJava8のObjectクラスのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Object.html

 

親クラスのコンストラクタを実行する(super)

3行目は親クラスで、10行目は子クラスです。

package test1;

class Color1 {
	String name;
	
	public Color1(String name) {
		this.name = name;
	}
}
class Color2 extends Color1 {
	public Color2(String name) {
		super(name);
	}
}
public class Test1 {
	public static void main(String[] args) {
		Color2 c2 = new Color2("赤");
		System.out.println(c2.name); // 赤
	}
}

11行目は、コンストラクタです。
12行目はsuperで親クラスのコンストラクタを実行します。

point

親クラスのコンストラクタを実行する場合、superを使用します。

 

親クラスのメソッドを実行する(super)

3行目は親クラスで、8行目は子クラスです。

package test1;

class Color1 {
	String getName1() {
		return "赤";
	}
}
class Color2 extends Color1{
	String getName2() {
		return(super.getName1());
	}
}
public class Test1 {
	public static void main(String[] args) {
		Color2 c2 = new Color2();
		System.out.println(c2.getName2()); //赤
	}
}

10行目はsuperで親クラスのメソッドを実行します。

point

親クラスのメソッドを実行する場合、superを使用します。

 

クラスの継承を禁止する(final)

3行目は親クラスで、8行目は子クラスです。
3行目のクラスの前にfinal修飾子がついています。

package test1;

final class Color1 {
	String getName1() {
		return "赤";
	}
}
//class Color2 extends Color1{
//	String getName2() {
//		return "青";
//	}
//}
public class Test1 {
	public static void main(String[] args) {
		Color2 c2 = new Color2();
		System.out.println(c2.getName1()); //
		System.out.println(c2.getName2()); //
	}
}

8行目のクラスは、3行目のクラスを継承できません。コンパイルエラーになります。

point

アクセス修飾子 final class クラス名

クラスの前にfinalをつけるとクラスの継承が禁止されます。

関連の記事

Java入門 クラスの仕組みとサンプル
Java コンストラクタのサンプル

△上に戻る