giovedì 28 marzo 2013

Q60


Given:
public class SuperTest {
       public static void main(String[] args) {
statement1
statement2
statement3
}
}

class Shape {
       public Shape() {
             System.out.println("Shape: constructor");
       }
       public void foo() {
             System.out.println("Shape: foo");
       }
}


class Square extends Shape {
       public Square() {
             super();
       }
       public Square(String label) {
             System.out.println("Square: constructor");
       }
       public void foo() {
             super.foo();
       }
       public void foo(String label) {
             System.out.println("Square: foo");
       }
}
What should statement1, statement2, and statement3, be respectively, in order to produce the result?
Shape: constructor
Square: foo
Shape: foo
A.
Square square = new Square(“bar”);
square.foo(“bar”);
square.foo();
B.
Square square = new Square(“bar”);
square.foo(“bar”);
square.foo(“bar”);
C.
Square square = new Square();
square.foo();
square.foo(“bar”);
D.
Square square = new Square();
square.foo(“bar”);
square.foo();
E.
Square square = new Square();
square.foo();
square.foo();
Risposta D
Con la  new Square() si entra nel costruttoe di Square che richiama quello della superclasse, cioè Shape. Questo produce una stampa di Shape: constructor .
System.out.println("Shape: constructor");
Adesso abbiamo un oggetto Square di cui possiamo invocare il metodo sovrascritto foo, che prendendo in ingresso una stringa stampa Square: foo .
public void foo(String label) {
System.out.println("Square: foo");
}
 
L'oggetto Square può usare anche i metodi della superclasse Shape, quindi anche il metodo foo invocato senza argomenti che stampa Shape: foo :
 
System.out.println("Shape: foo");

Nessun commento:

Posta un commento