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)のことを、サブクラスと言います。

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

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

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

スポンサードリンク

関連コンテンツ

オススメ記事

carousel

【Bootstrap 4】くるくる回転するUI、カルーセル機能のを実装方法!

Bootstrap4の使い方、第8回目です。 サイトをみていると、画像を横並びにしてくるくると回転するカルーセル機能を実装しているサイトがありますよね。 Bootstrap4には、カルーセルを

【Android Studio】新規プロジェクトを作成する方法。

インスタント焼きそばを作ろうとすると、なぜか焼うどんになります。 @It_is_R です。 しかも、ラーメン作ろうと思うと焼きそばができあがります。 前回、 Android Studio のイ

JavaScriptマンガ講座。初心者でも痛いほど理解できる変数の使い方。(実践編)

押入れが部屋になっている@It_is_Rです。 今回の記事はJavaScriptマンガ講座、2回目となりました。 この企画はJavaScriptをフザケまくって覚えようというものです。

FC2 blog customize

FC2ブログ ”最強” カスタマイズ入門講座。背景を変更する。

三度の飯よりも好きなものが多すぎて比較にならない@It_is_Rです。 FC2ブログ"最強"カスタマイズ入門講座の続きですね。最強にカスタマイズしていきましょう。 今回は背景色の変更をメインに

WordPress|特定カテゴリーに属する記事を一覧表示させる方法!!

今まで、何度かに分けて書いた記事でも、その一覧がなかったので見にくいなーと思っていた@It_is_Rです。 昨日、記事の一覧表示をするショートコードを作って、記事の一覧が欲しい記事にだけ貼り付けてみ

enchant.jsのロード画面を、好きな画像に変更する方法。

今日は爆睡していました。@It_is_Rです。 enchant.jsのロード画面はカッコわるいなとずっと思っていました。「あ、これenchant.jsで作ったんだな」って思われてしまうじゃないで

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

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

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

WordPress テーマ自作 | Pug ( Jade ) で記事一覧ページを作る方法!

愛と勇気だけが友達の@It_is_Rです。 WordPress テーマ自作シリーズ第五回目です。 今回から、本格的にテーマを作っていきます。 前回の記事はこちらです。 WordPres

Swift

【Xcode7】Swift2使ってみた。playgroundで遊びながら覚える。

最近は押入れの中で寝るのが日課の@It_is_Rです。 押入れは寝心地がいいです。部屋も押入れ分だけ広くなるし。 SwiftはAppleが出しているプログラミング言語です。Swiftを使うこと

FC2 blog customize

FC2ブログ ”最強” カスタマイズ入門講座。ヘッダーをカスタマイズ。

寒くなってきましたね。皆さま前かがみになって、まるで亀の様です。@It_is_Rです。 皆様がブログを見て、一番最初に目に入ってくるのはどこでしょうか? 殆どの場合、ヘッダー部分ですよね。つま

コメントをどうぞ!

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