未分類

継承

投稿日:

   

継承のしくみを知る

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

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という(修飾子)がついています。この修飾子がついているクラス …

サンプルイメージ

クラスとは

これまでの章では、変数や配列など、さまざまなjavaの機能について学んできました。このような知識を使えば、いろいろなプログラムを自由に作成することができます。 たとえば、カードゲームのカードを管理する …

Android イベントの処理

      ソースコード 実行結果は、KeyCode>24というように押されたキーコードが表示されます。 KeyExクラスは、プログラムの本体となるクラスです。 KeyViewクラスは、ビューとなるク …

サンプルイメージ

練習問題(配列)解答例

配列を利用すると、同じ種類の多くのデータを扱うことができます。たくさんのデータをまとめ、簡単に管理することができます。今はすべてを理解しようとせずに前に進みましょう。 大切なのは、プログラミングを勉強 …

サンプルイメージ

練習問題

練習問題  HelloWorld.java 以下のプログラムの空欄を埋めて実行結果のように表示させてください。 練習問題  ChangeXY.java 下のプログラムの空欄を埋めてアイテムAとアイテム …