未分類

抽象クラス

投稿日:

         

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

実は、この抽象クラスは、

オブジェクトを作成することができない

という特徴があります。つまり、抽象クラスCreaturesは、new演算子を使いオブジェクトを作成することができないクラスです。

Creaturesクラスをよく見るとshow()メソッドの内容が定義されていません。

このようなメソッドにも、abstractというキーワードをつけます。これは抽象メソッドと呼びます。

抽象クラスは次のようなかたちです。

抽象クラスを利用する

抽象クラスCreaturesは、サブクラスを拡張することができます。ただし、

抽象クラスから継承した抽象メソッドの内容をサブクラスで定義してオーバーライドする

という作業をしなければなりません。

抽象クラスを使った下記のコードを見てください。

抽象クラスではオブジェクトを作成することができません。抽象クラスのメソッドは必ずサブクラスでオーバーライドされます。

結果、それぞれのオブジェクトに適したshow()メソッドが呼び出されています。

なぜなら、抽象クラスを拡張したサブクラスはどれも、抽象クラスの抽象メソッド(show()メソッド)と同じ名前のメソッドを持っているからです。

つまり、抽象クラスを使えば、そのサブクラスをまとめて簡単に扱うことができます。

instanceof演算子

instanceof演算子を使うと、

オブジェクトのクラスを調べる

ということができます。

instanceof演算子を使うと、左辺の変数がさしているオブジェクトのクラスが、右辺と同じクラスであるかどうかを調べる時に便利です。

インターフェイスのしくみを知る

javaでは、抽象クラスと同じようなしくみを、インターフェースというものを使ってあらわします。

インターフェイスは、フィールドとメソッドを持つことができます。ただし、コンストラクタは持ちません。

通常、インターフェイスのメンバには何も修飾子をつけません。しかし、フィールドにはpublic static final、メソッドにはabstractという修飾子をつけているのと同じになります。

インターフェイスはオブジェクトを作成できません。つまり、newを使いオブジェクトを作成できないのです。

ただし、インターフェイス型の変数・配列は宣言できます。

インターフェイスを実装する

インターフェイスはクラスと組み合わせて使うことになり、そのことをインターフェイスを実装するといいます。

CharacterクラスでiCreaturesインターフェイスを実装するには、下記のように記述します。

さて、このようなCharacterクラスのオブジェクトを作成するためには、

インターフェイスのメソッドをすべて定義する

という作業が必要です。

実行結果を見るとそれぞれのshow()メソッドが適切に呼び出されています。

インターフェイスも抽象クラスと同じような働きをもつことがわかります。

ただし、インターフェイスのフィールドはすべて定数で、メソッドはすべて抽象メソッドとなりますので注意してください。

これらの知識を使うと、多態性によってわかりやすいコードを記述することができます。javaでは多くのクラスやインターフェイスを組み合わせて、効率よく大規模なプログラムを作成できます。

-未分類

執筆者:


comment

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

関連記事

サンプルイメージ

キーボードからの入力

キーボードからいろいろな文字を入力させ、その値を出力するコードを記述してみましょう。 String str = br.readLine(); という部分が重要です。実行画面がユーザーからの入力を待つ状 …

サンプルイメージ

練習問題(クラスの機能)

      練習9-1 下図の様な実行結果となるように下のプログラムの空欄を埋めて実行してください。 練習9-2 下記のような実行結果となるようにShohinクラスを作成してください。 練習9-3 下 …

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

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

サンプルイメージ

練習問題(メソッド)

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

サンプルイメージ

練習問題(for)解答例

以下に問題の解答例を記述します。 いかがでしょうか。多くの人は文法は理解できたが、それをどこでどのように使えばいいのかわからないと思っている人がほとんどでしょう。 何かを作成するまで処理の流れや組み合 …