Q26
Given:
public class Speak { /* Line 1 */
public static void main(String[] args) { /* Line 2 */
Speak speakIT = new Tell(); /* Line 3 */
Tell tellIt = new Tell(); /* Line 4 */
speakIT.tellItLikeItIs();
/* Line 5 */
(Truth)speakIT.tellItLikeItIs();
/* Line 6 */
((Truth)speakIT).tellItLikeItIs(); /* Line 7 */
tellIt.tellItLikeItIs();
/* Line 8 */
(Truth)tellIt.tellItLikeItIs();
/* Line 9 */
((Truth)tellIt).tellItLikeItIs(); /* Line 10 */
}
}
class Tell extends Speak implements Truth {
public void tellItLikeItIs() {
System.out.println("Right on!");
}
}
interface Truth {
public void tellItLikeItIs();
};
Which three
lines will compile and output “right on!”?
A.
Line 5
Line 5
B.
Line 6
Line 6
C.
Line 7
Line 7
D.
Line 8
Line 8
E.
Line 9
Line 9
F.
Line 10
Line 10
La linea 5 non compila perchè speakIT è di tipo Speak e quindi non ha il metodo definito.
La linea 6 non compila per lo stesso motivo della linea 5, speakIT non ha il metodo definito. Infatto il cast viene effettuato dopo la chiamata al metodo. Ma anche se andasse bene così si sta cercando castare ad un interfaccia l'uscita di un metodo e questo non ha senso.
La linea 7 compila perchè corregge l'errore della linea 6. Adesso prima si fa il cast e dopo si fa la chiamata al metodo che adesso è definito perchè è definito in Truth .
La linea 8 ovviamente compila perchè tellIt è di tipo Tell e quindi ha definito il metodo.
La linea 9 presenta lo stesso problema della linea 6 , si cerca di castare a Truth l'uscita di un metodo.
La linea 10 compila per lo stesso motivo della linea 7, a maggior ragione perchè si parte da un oggetto Tell.
riferimenti : tipizzazione statica.
riferimenti : tipizzazione statica.
Nessun commento:
Posta un commento