未分類

継承

投稿日:

   

継承のしくみを知る

これまでは、「キャラクタ」の機能をまとめたクラスを使って、プログラムを作成してきました。この章では、さらに、新しいプログラムを作成していくことにしましょう。

5種類の格闘ゲーム

を扱うプログラムを作成することを考えてみてください。野獣キャラクタは初期キャラクタの一種ですから、多くの共通点があります。

javaでは、すでに作成したクラスをもとにして、新しいクラスを作成することができるようになっています。このように、新しいクラスを作成することを、

クラスを拡張する(extends)

といいます。

新しいクラス(野獣キャラクタ)は、概存のクラス(初期キャラクタ)のメンバを「受け継ぐ」しくみになっています。このため、初期キャラクタにあるメンバをコード中にもう一度書く必要はありません。野獣キャラクタ独自の機能だけを書けばよいのです。

このように、新しく拡張したクラスが概存のクラスのメンバを受け継ぐことを、継承と呼びます。この時、もとになる概存のクラスはスーパークラス、新しいクラスはサブクラスと呼ばれます。

クラスを拡張する

サブクラスの宣言をするには、extendsというキーワードに続けて、スーパークラスの名前を指定します。

BeastCharaクラスはCharacterクラスのメンバを継承します。このため、BeastCharaクラス内では、Characterクラスにない、独自のメンバだけ書けばよいのです。

これが、stageフィールドとsetStage()メソッドとなっています。

setChara()メソッド①はスーパークラスで定義されているメソッドです。また、サブクラスで新しく追加したsetStage()メソッド②も同じように呼び出すことができます。

このように、クラスを拡張することで、すでに設計したクラスから効率よく新しいクラスを作成することができます。

スーパークラスのコンストラクタを呼び出す

Sample11_01_1の実行結果をよく見てください。最初に「キャラクターが誕生しました。」と出力されていることから、スーパークラスのコンストラクタの処理が先に行われていることがわかります。

このように特に何も指定しない場合、

サブクラスのコンストラクタ内の先頭で、スーパークラスの引数のないコンストラクタを呼び出す

ということになっています。

スーパークラスのコンストラクタは、サブクラスに継承されません。そのかわり、スーパークラスの引数なしのコンストラクタが、自動的に呼び出されます。

スーパークラスのコンストラクタを指定する

スーパークラスにコンストラクタが複数ある場合には、呼び出されるコンストラクタを明示的に指定したい場合があります。

このとき、サブクラスのコンストラクタの先頭で、super()という呼び出しをすることができます。

サブクラスの引数4個のコンストラクタの先頭で、

super(n, a, b);

と記述しています。「引数のないコンストラクタ」ではなく、「引数2個のコンストラクタ」が最初に呼び出されています。つまり、super()を記述すると、スーパークラスのどのコンストラクタを呼び出すかを指定できるのです。

サブクラス内からアクセスする

privateやpublicを指定して、メンバへのアクセスをコントロールし誤りのおきにくいプログラムを作成してきました。

ここでは、サブクラスとスーパークラスという密接な関係にあるクラスについて、どのようにアクセスできるのかを学ぶことにしましょう。

privateメンバにはクラスの外からアクセスすることができません。スーパークラスのprivateメンバには、サブクラスからもアクセスすることができないようになっています。

しかし、サブクラスとスーパークラスは密接な関係にあるので、protectedという指定方法があります。下記のコードを見てください。protectedメンバに書き換えると、BeastCharaクラスからアクセス可能です。

スーパークラスでprotectedを指定することで、

サブクラスからアクセスすることができる

というしくみになっています。

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

サンプルイメージ

プログラミングの効率的な勉強法

やる前から苦手意識を持たない。答えは一つではない。 プログラミングはパソコンに対してこうしろと命令文を書いているだけです。 少し勉強しただけで、自分にはプログラミングに向いていないと諦めてしまう人がい …

サンプルイメージ

抽象クラス

          このクラスは「いきもの(Creatures)」というモノについてまとめたクラスです。クラスの先頭部分に、abstractという(修飾子)がついています。この修飾子がついているクラス …

サンプルイメージ

クラス変数、クラスメソッド

      これまでのコードは、クラス内のメンバ(フィールドとメソッド)は、オブジェクトが作成されたときに、はじめて値を格納したり呼び出したりすることができました。 オブジェクトを作成することによって …

サンプルイメージ

for文のしくみを知る

激レアキャラをゲットするまでは・・・→レアガチャを引き続ける 私たちの生活に朝起きる、歯を磨く、朝食を食べる、学校に行く・・・といった「繰り返し処理」を行っています。 Javaでは、このような繰り返し …

サンプルイメージ

練習問題(メソッド)

練習8-1 下記の2つのクラスがある。[WelcomeMain1.java]を実行すると下のような結果になるように[Welcome1.java]の空欄を埋めてください。        練習8-2 下記 …