通過テストの解答 <新わかりやすいJava 入門編>

 

問1

A C D

スーパークラスにサブクラスのオブジェクトを代入する操作だけが正しい。

問2

D E

instanceofでチェックするクラス型が、ObjectOutputStream か、そのスーパークラスであるときのみtrueになる。

B. 20

 継承関係にあるクラス同士で、同じ名前のフィールド変数を定義することは問題ない。その場合、常に、自クラスで定義した変数が優先される。
Execクラスでは、Rect型オブジェクトをそのスーパークラスであるShape型の変数shapeに代入している。dispメソッドはRectクラスでオーバーライドされているので、shape.disp()で実行されるのはRectクラスのdispメソッドである。dispメソッドで出力するvalは、自クラス、つまり、Rectクラスのvalなので、20と表示される。
 さらに詳しい解説は、20章の「フィールドの隠ぺい」(P.491)を参照すること。

 以下は、平均値を計算して表示する汎用クラスComputeと、実際に、Computeクラスのオブジェクトを作って、runメソッドを実行するExecクラス。問題文にあるクラスと同じものを参考までに表示しておく。Computeクラスのrunメソッドの引数は、Mean型であるが、Execクラスでは、サブクラスのArithmeticMean型のオブジェクトを指定している。