Given:



Which two modifications enable the code to compile?

A. At line 1, remove abstract
B. At line 9, insert super();
C. At line 12, remove public
D. At line 17, insert super(x);
E. At line 17, insert super(); super.side = x;
F. At line 20, use public void area () {

題解

原先題目的程式會在第16行和第20行編譯錯誤,原因在於Rectangle類別的建構子沒有指定要先呼叫哪個建構子,因此會自動加上「super();」去呼叫Square類別沒有參數的建構子,但這個建構子並不存在。而Rectangle類別中的area方法,覆寫了Square類別中的area方法,但是可見度卻從public降到default,這是不被允許的。

所以說,選項D和選項F是正確的。

選項C不行的原因在於,Shape類別的area方法之可見度為protected,所以Square類別的area方法之可見度必定也不能低於protected。