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

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

目次

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

クラスの継承とは

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

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

継承の書き方

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

クラスの継承のサンプルです。

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()); // 青
	}
}

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

 

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

親クラスのコンストラクタを実行するサンプルです。 superを使用します。

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で親クラスのコンストラクタを実行します。

 

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

親クラスのメソッドを実行するサンプルです。 superを使用します。

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()); //赤
	}
}

8行目のクラスは、3行目のクラスを継承しています。
10行目はsuperで親クラスのメソッドを実行します。

 

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

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

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()); //
	}
}

3行目は、final修飾子がついています。
8行目のクラスは、3行目のクラスを継承できません。コンパイルエラーになります。

関連の記事

Java入門 クラスの仕組みとサンプル
Java コンストラクタのサンプル
Java オーバーライドのサンプル
Java インターフェースのサンプル(interface)
Java 抽象クラスと抽象メソッドのサンプル(abstract)

△上に戻る