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

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

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

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

スポンサードリンク

おすすめの記事♪

Swift

【Xcode7】Swift2でMacアプリ開発。画像を読み込む為のボタンを作る。

[email protected]_is_Rです。 最近はSwiftの記事が多いと思っている人もいるのでは無いでしょうか。実はRは現在、Swiftを使ってゲーム開発のお助けアプリを

Swift

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

[email protected]_is_Rです。 押入れは寝心地がいいです。部屋も押入れ分だけ広くなるし。 SwiftはAppleが出しているプログラミング言語です。Swiftを使うこと

Medibang Paint

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

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

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

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

PhotoShopでFire Brushesを使った炎のテラ簡単な描き方。

[email protected]_is_Rです。 イラストに炎を入れるとカッコいいですよね。でも、炎を描くのって結構めんどくさいです。 そこで、PhotoShopを使って炎を描くのに、とて

Saya

本物にしか見えない 3DCG Saya のイラスト描いてみた。

ファイナルファンタジーの 3D 画像を小学生のときに初めて見て、ものすごく感動した @It_is_R です。 鉛筆で 3D ってどうやって描くんだろうと勘違いし、描いてました。 3DCG とい

java

【激分かりやすく!!】javaでじゃんけんゲームプログラム!!

お久しぶりです。 ゲーム制作ページのブログなのに、なんか全然ゲーム制作できてないですね。 今作ってるゲームもちょっと放置プレイ状態だし……。 ちょっと待ったー!誰が放置プレイ状態だとっ!! 

blender

Blenderで3D美少女キャラの作り方。その9(顎と首を作る)

美少女よりもセクシーなおねえさんが好きです。@It_is_Rです。 いろいろなジャンルの記事を書いてるので、一つのジャンルの記事がおろそかになってしまいそうで怖い。もうなってるか? では、3D

Swift

【Xcode7】Swift2でMacアプリ開発。Storyboardでボタンを作る。

喧嘩するほど仲がいいとは言いますが、喧嘩する相手がいません。友達がいないということでしょ[email protected]_is_Rです。 前回、StoryboardでMacのウィンドウに文字を表示しました。しかし、

ゲーム開発で使用する人魚のイラスト描きました。

制作中の人魚のゲームは、Unityを使ったAndroid専用[email protected]_is_Rです。 そんな訳で、いまUnityの使い方を覚えているのですが、まだまだ時間がかかりそう。


コメントを残す

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


Category

Games