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

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

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

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

スポンサードリンク

おすすめの記事♪

HTML CSS

Google Fontsの使い方。サイトをカッコよくしよう。

[email protected]_is_Rです。 WordPress、もしくは他のホームページやブログをやっていると、フォントを変えたいなと思うことも多いと思います。 そこで、Googl

SCSS vs SASS どっちが便利か違いを比較。おまいら SASS 使えよ!

CSS を書くときに、 Sass はもう手放せません。 @It_is_R です。 さて、今回のテーマとなる Sass の表記には、2種類ありますよね。 SCSS と、 SASS です。

クローバPAGE

【クローバPAGE】知識ゼロでも超簡単にサイトを作れるサービス!!

[email protected]_is_Rです。 しかし、HTMLとか、CSSとかなにそれ?……という感じのひともいるでしょう。 そこで、今回は知識が全くなくても超簡単にWebサイトが作れ

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

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

enchant.js

ゲームに背景画像を表示する方法!( enchant.js )

[email protected]_is_Rです。 ゴールデンウィークいかがお過ごしでしょうか。 今回は、 enchant.js を使った横スクロールアクションゲームの背景を表示してみようと思います。 空と

Medibang Paint

MediBang Paint Proの使い方。4コマ漫画を描く8つの手順。

[email protected]_is_Rです。 さて、最近は本当にMediBang Paint Proが流行っているから凄いなと思っています。 そこで、今回はMediBang

上海

上海ガール、イラスト描きました!

[email protected]_is_Rです。 芸術の世界はとても厳しいと痛感しております。 さて、芸術の世界では自分をアピールすることが必要となってきます。その為には、自分の作品をたくさ

あなたの前世は猫でしょう!

LINEスタンプを販売しよう。販売の手順や方法。

前は、猫より犬派だったけど、猫を飼いはじめて[email protected]_is_Rです。 今回は、LINEスタンプの販売方法について、記事を書いてみたいと思います。 LINEスタンプは、誰

enchant.js

enchant.js でクラスを作る、激分かりやすい方法!

[email protected]t_is_Rです。 前回までの enchant.js の記事で、画像の表示やキャラの移動など、ゲーム制作には欠かせない基礎知識が身についたのではない

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

今まで、何度かに分けて書いた記事でも、その一[email protected]_is_Rです。 昨日、記事の一覧表示をするショートコードを作って、記事の一覧が欲しい記事にだけ貼り付けてみ


コメントをどうぞ!

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




Category

Games