Given:
class CD {
int r;
CD(int r) {
this.r = r;
}
}
class DVD extends CD {
int c;
DVD(int r, int c) {
// line n1
}
}
And given the code fragment:
DVD dvd = new DVD(10, 20);
Which code fragment should you use at line n1 to instantiate the dvd object successfully?
A.
super.r = r;
this.c = c;
B.
super(r);
this(c);
C.
super(r);
this.c = c;
D.
this.c = r;
super(c);
題解
由於第15行的DVD類別之建構子原先並沒有使用super或是this敘述來呼叫別的建構子,因此Java會在編譯的時候將它改成:
DVD(int r, int c) {
super();
}
因為CD類別並不存在「CD()」這樣的建構子,如此一來便會造成編譯錯誤,因此需要插入一些程式至line n1來解決這個問題。
選項A並沒有使用super或是this敘述來呼叫別的建構子,無法解決問題。
選項B用來呼叫自身其它建構子的this敘述會發生錯誤,因為不是在建構子的第一行呼叫。
選項C正確。
選項D用來呼叫自身父類別建構子的super敘述會發生錯誤,因為不是在建構子的第一行呼叫。