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
Shape: constructor
Square: foo
Shape: foo
A.
Square square = new Square(“bar”);
square.foo(“bar”);
square.foo();
Square square = new Square(“bar”);
square.foo(“bar”);
square.foo();
B.
Square square = new Square(“bar”);
square.foo(“bar”);
square.foo(“bar”);
Square square = new Square(“bar”);
square.foo(“bar”);
square.foo(“bar”);
C.
Square square = new Square();
square.foo();
square.foo(“bar”);
Square square = new Square();
square.foo();
square.foo(“bar”);
D.
Square square = new Square();
square.foo(“bar”);
square.foo();
Square square = new Square();
square.foo(“bar”);
square.foo();
E.
Square square = new Square();
square.foo();
square.foo();
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