B. Circle
dispメソッドは、Circleクラスでオーバーライドされている。Circle型のオブジェクトをShape型の変数に代入しても、dispメソッドはCircleクラスでオーバーライドしたメソッドが起動する。
C. ①BasicStat a ②new AdvancedStat()
やや難しい問題。クラスの継承関係は問題から次の図のようになる。
Execクラスを見ると、ex.run( ② )を実行しているが、Executorクラスの定義から、これは、System.out.println(200 * a.rate()); を実行していることがわかる。そして、実行結果では、60.0と表示されているので、a.rate()は、0.3でなければならない。rate()メソッドの戻り値で0.3を返すのは、AdvancedStatクラスだけなので、②は new AdvancedStat() が正解である。
runメソッドの引数である①も、AdvancedStat a ならよいのだが、解答の選択子には、BasicStat a と Stat a しかない。AdvancedStat型のオブジェクトを代入できるのは、そのスーパークラス型であるBasicStatなので、BasicStat a が正解となる。
以上から、正解は C。