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

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

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

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

スポンサードリンク

おすすめの記事♪

blender

Blenderで3D美少女キャラの作り方。その8(後ろ髪を描く)

モンスターボールって下ネタですか?@It_is_Rです。 はい、いきなり不愉快な思いさせてすいませんでした。 今回はBlenderで作る3D美少女キャラの、第8回目です。 前回は空いた空

enchant.js

HTML5 と javascript ( enchant.js )を使ったアクションゲーム開発。

以前、Flashを使って、横スクロールアクションゲームを作ろうとしていたのですが、実はAndroid4.xではFlashPlayerがサポートされておらず、最近のAndroidではFlashPlaye

Android アプリ開発入門! Android Studio のインストール手順。

人の笑顔が大嫌い。 @It_is_R です。 Android アプリ開発では、 Eclipse や Android Studio を使ってアプリを開発するのが一般的です。 一般的に言語は Ja

RGB

Photoshopを使う上で必要不可欠。RGBとCMYKって何?

人生は山あり谷ありといいますが、下り坂しか無[email protected]_is_Rです。 今回はPhotshopなどのソフトを使う上で必要不可欠となる、RGBやCMYKについて

Medibang Paint

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

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

HTML CSS

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

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

CSS Button

サイト制作に!!CSSでマウスオーバーボタンの作り方。

新年初の記事です。とりあえず、あけましておめ[email protected]_is_Rです。 お正月……おそーがつ……おそまつ……おそ松さん。新年早々くだらないこと言ってないで早く記事を書けって話ですね。

Swift

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

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

blender

Blenderで3D美少女キャラの作り方。その4(前髪と横髪を描く。)

Blenderでの3Dキャラ制作の記事、長い期間放置して[email protected]_is_Rです。 前回までのキャラ作成は、顔ができたところまででした。 今回は。髪の毛を作っていきます。 さて、Bl

Adobe Photoshop CC 2015.5の最新スゴすぎる新機能を3つ紹介!!

[email protected]_is_Rです。 2016年6月20日、Adobe CCが2015.5にバージョンアップしました。 そこで今回は、Adobe Photo


コメントを残す

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


Category

Games