未分類

継承

投稿日:

   

継承のしくみを知る

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

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の機能について学んできました。このような知識を使えば、いろいろなプログラムを自由に作成することができます。 たとえば、カードゲームのカードを管理する …

サンプルイメージ

配列の応用

配列の要素数を調べるコードを記述します。配列の要素数(ハコの数)は、配列の長さ(大きさ)と呼ばれています。 Javaでは、配列要素に.(ピリオド)をはさんでlengthと記述すると、配列の要素数をあら …

サンプルイメージ

はじめてのAndroidアプリ作成

     文字列を描画するプログラムを作り解説します。 ソースコードの追加 ソースコードを追加する手順は次の通りです。今回は、「StringEx」と「StringView」の2つを追加します。 ①プロ …

Androidで神経衰弱ゲームつくりました。

       プログラムの解説 14行目のT[ ]はカードをシャッフルする領域です。 Tebanは、プログラムを制御する領域です。  0の時は、1枚目のカードをクリックします。 1の時は、2枚目のカー …