Java 基礎問題8 平成15年度春期問8 解説
解説 |
---|
(問題概要) この問題は、[プログラムの説明]より、三角形・長方形・正方形の面積を求めて、出力するプログラムです。クラスは、5個から構成されています。 (前提知識) この問題で問われているのは、以下の点です。 ●抽象クラスの概念 ●継承 ●オーバーライド(子クラスでのメソッドの再定義) ●super ●toString()メソッド これらの知識があれば容易に解答出来る問題かと思います。 (解説) [プログラム1]について ここからJavaのプログラムがスタートしています。問題文の通り、3つのクラスのオブジェクトを作成して、抽象クラスの配列へ格納しています。配列の要素は、0,1,2となります。これをfor文を使用して、3つの図形の面積を出力しています。 [プログラム2]について これが抽象クラスです。キーワードは、「abstract」です。classの前にあるとこのクラスは抽象クラスとなります。、抽象クラスでは、「抽象メソッド」という本体の記述のないメソッドを定義出来ます。実際の本体は、抽象クラスをスーパークラスとして継承して、このクラスで本体を記述するものです。つまり、抽象クラスは、継承されることを前提としています。そして、抽象メソッドは、継承されたサブクラスで、実際の処理を記述します。 [プログラム3]について これは、三角形のクラスです。ここで「this」がありますが、これは、自分自身のクラス内という意味です。ここで、「a」を解答する場合、ポイントとしては、抽象メソッドの「getArea()」が再定義されていれば、抽象クラスからの継承と考えられます。つまり、解答は、「Fiqure」です。 [プログラム4]について 長方形のクラスです。解答の「b」については、上記と同様に抽象メソッドが再定義されていますので、解答は、「Fiqure」てとなります。 解答の「c」については、実際の長方形の面積を求める処理となります。これは、縦×横ですから、「height * width」となります。 [プログラム5]について 正方形のクラスです。このプログラムを見ると、抽象メソッドがありません。ここに、まず注目して下さい。長方形は「縦×横」です。正方形は「横×横か縦×縦」です。この特性を利用すれば、上記の長方形クラスを利用することが可能です。ですから、「d」については、クラス「Rectangle」から継承されていると考えられます。これを検証するために、解答「e」について確認します。eはコンストラクタの処理内容を問われています。これは、引数のwidthを利用してスーパークラスのコンスクラクタを実行するようにすれば良い訳です。このような場合、superというキーワードを使用します。この際の注意点として、スーパークラスのコンストラクタには引数が2つあります。しかし、プログラム5のコンストラクタの引数は1個です。つまり、super(width, width)とすれば、Rectancegleクラスのコンスクラクタが呼び出されます。これによって、プログラム5でも、getAreaが利用することが出来ます。これが継承の利点でもあります。 (最後に) プログラム1のfor文の処理を良く確認して下さい。画面に表示する処理をしていますが、fiqures[i]がありますが、これでどうして、問題文のような内容が出力されるのでしょうか?これは、fiqures[i]の中身は、三角形、長方形、正方形のオブジェクトを格納しています。そのオブジォクトを出力しています。これは、toString()メソッドにあります。このメソッドは上記の3つのオブジェクトに実装されています。printlnで、オブジェクトを指定した場合に、toString()メソッドが内部で呼び出されます。よって、問題文のような出力結果となります。 |
pafu 投稿
メニューへ戻る