1. HOME
  2. »
  3. プログラミング・Web
  4. »
  5. Java
  6. »
  7. 【Java】スーパクラス、サブクラスとは?継承について。

【Java】スーパクラス、サブクラスとは?継承について。

猿も木から落ちますが、Rは木から落ちません。だって登らないから。 @It_is_R です。いや、登ろうと思っても登れません。

Javaを使っていると継承という言葉をよく耳にしますよね。どういうものなのか説明を読んでみても、いまいちピンとこない人も多いと思います。
そんな人の為に、今回はJavaの継承について、詳しく解説していきたいと思います。

継承とは、親の能力を全て引き継いだ子供が、親を超した瞬間みたいなものです。

意味が分からない!?
文字で説明されても分かりにくいので、これから説明していきたいと思います。

継承について

eyecatch_car

例えば、こんな物語があったとしましょう。
主人公は、黒魔術を専門に学ぶ魔術師の卵。彼は人々の恨みを晴らすべく、対象を黒魔術でゆっくりじわじわと時間をかけて殺していく。彼自身は多額の報酬を受け取るかわりに、自らの寿命を半分縮める。

はい。
では、今回はこの物語を、RPG風にプログラムで作ってみたいと思います。

プログラムを書く

先ほど、継承は親の能力を全て引き継いだ子供が、親を超した瞬間みたいなものと書きました。
親というのは、別にこの物語の主人公の親ではありません。

では、親、子供とは何の事でしょうか?

まず、プログラムを作ってみましょう。

public class Main {
	public static void main(String[] args) {
		Kuromajutsushi k = new Kuromajutsushi();
		System.out.println("HP" + k.hp);
		k.magic();
		k.blackMagic();
		System.out.println("HP" + k.hp);
	}
}

class Majutsushi {
	int hp=200;
	void magic() {
		System.out.println("魔法を使った。");
	}
}

class Kuromajutsushi extends Majutsushi {
	void blackMagic() {
		hp=hp/2;
		System.out.println("自らのHPを半分に削り、黒魔術を使った。");
	}
}

<実行結果>
HP200
魔法を使った。
自らのHPを半分に削り、黒魔術を使った。
HP100

継承とは?

実は、上記のプログラムの、18行目で継承が行われています。

class Kuromajutsushi extends Majutsushi{}

の部分ですね。
Majutsushiというクラスを継承して、Kuromajutsushiというクラスが作られています。

つまり、

クラス名 extends 継承したいクラス名 {}

と記述することにより、継承を行うことができます。
では、継承を行うと、どの様なことが起こるのでしょうか。

継承の利点

上の例では、魔術師クラス(Majutsushi)を、黒魔術師クラス(Kuromajutsushi)が継承することにより、黒魔術師クラスを呼び出すだけで、魔術師クラスの能力を使えるようになります。

何が言いたいかというと、「黒魔術師は魔術師だろ?」ってことです。
つまり、黒魔術師は、魔術師の能力に対して、黒魔術という能力が増えただけの存在ということで、プログラムを作ったのです。

その為、魔術師クラスで宣言したhpという変数が黒魔術師クラスで使えたり、黒魔術師が、黒魔術の他に、一般的な魔法が使える様になったのです。

これが、一般的な継承の使い方です。

継承の注意点

継承の注意点として、全く関係無いクラスを継承することは、悪いとされています。
もちろん、継承できない訳ではありませんが、全く関係無いクラスを継承することで、バグの発生などに繋がる恐れがあります。

では、どういうクラスなら継承していいのでしょうか。
それは、そのクラスに対して、is-a関係にあるかどうかという考え方があります。

今回の場合だと、Kuromajutsushi is Majutsushi、黒魔術師 is 魔術師という関係にあるため、継承することができます。

スーパークラス、サブクラスとは?

上記のプログラムの場合、魔術師クラス(Majutsushi)のことを、スーパークラスと言います。
それに対して、黒魔術師クラス(Kuromajutsushi)のことを、サブクラスと言います。

ここでの注意は、スーパークラスよりもサブクラスの方が強いということです。

名前からして、スーパークラスは強そうですが、ただの魔術師です。
しかし、その魔術師の能力を全て持っている黒魔術師は、サブクラスなんて弱そうな名前ですが、魔術師よりも強いのです。

また、スーパークラスのことを親クラス、サブクラスのことを子クラスともいいます。
先ほど、親を超したと言っていたのは、このことだったのです。

スポンサードリンク

関連コンテンツ

オススメ記事

おみくじゲームを作るべ!

小学生からのプログラミング入門。JavaScriptでおみくじを作ろう!

小学生から始めるプログラミングシリーズです。 この講座ではScratch(スクラッチ)から少しレベルアップして、JavaScriptを使ってプログラミングを行なっていきます。 Scratc

【Android Studio】アプリ開発の基本とそれぞれのファイルの役割を覚える。

iPhone持ってないみなさん、一緒にAndroidアプリ開発しましょう。@It_is_Rです。 Androidアプリ開発、5回目となりました。 今回は Android Studio でアプリ

プログラミングのクラスってなぁに?

小学生からのJavaScript。クラスの概念をしっかりと理解しよう!

小学生からのプログラミング講座(こうざ)、第12弾です。 前回はマップ上をキャラクターが自由に動くことができるようにしました。 今回はES6から使われるようになった「ク

enchant.js100行未満!!本格シューティングゲーム作り方。

昨日歩き回ったせいで、足がかなり痛い@It_is_Rです。 さて、今回はenchant.jsのネタです。enchant.jsを使うと、javascriptのプログラムがものすごく簡単に書けてしま

WordPress テーマ自作 | 本格的に作りたい人が揃えるべきツールや知識。

時計を見るとなぜか悲しくなります。@It_is_Rです。 今回から、いくつかの記事に渡って、 WordPress のテーマ(テンプレート)を自作する方法を紹介していきたいと思います。 しかし、

wordpress

WordPress にウィジェット(サイドバー)を追加する方法。

サイドバーというより、頭がパーな@It_is_Rです。やかましいわ。 WordPress テーマ自作シリーズ、早くも第6回目です。 今回はウィジェット(サイドバー)を追加する方法を紹介します。

Local by Flywheel

一瞬でWordPressローカル環境を作成! Local by Flywheelの使い方

考え事をしていると、目が上にいっている@It_is_Rです。 Local by FlywheelはWordPressのローカル開発環境を簡単に作れるツールです。 今回はこれを使って、ローカルに

scratch

小学生から始めるScratch入門。シューティングゲームを作ろう!

小学生から始めるScratch入門です。 前回、ゲーム開発に必要な知識を学びました。 第3回目の今回は、これまでに学んだ知識を活用し、実際にシューティングゲームを作ってみようと思います。

カスタムロゴの使い方。 WordPress サイトのタイトルを画像に変更!

笑いたい時に笑えず、笑っちゃいけない時に笑えてくる@It_is_Rです。 WordPress テーマ自作シリーズ第9回目となります。 今回はカスタムロゴの使い方を紹介したいと思います。

WordPress テーマ自作 | functions.php から CSS を読み込む方法。

ふぁ……ふぁ……、ファンクションッ!! あ、どうも@It_is_Rです。 なに笑ってるんですか? WordPress テーマ自作シリーズ第10回目です。 今回は、 functions.php

コメントをどうぞ!

メールアドレスが公開されることはありません。