pafuイーランスクール 学んでできる

メニューへ戻る

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 投稿

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる