Gli obiettivi di questa esercitazione sono: capire i concetti di ereditarietà
e sovrascrittura, sfruttare l'ereditarietà per il riutilizzo del codice,
saper utilizzare la parola riservata super, saper utilizzare semplici
gerarchie di classi (capitolo 9 fino a 9.2.3 compreso).
Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.
Obiettivo: comprendere il concetto di ereditarietà e sovrascrittura.
Attività:
class A {
public int m1() {
return 1;
}
public int m2() {
return 2;
}
}
class B extends A {
public int m2() {
return 4;
}
public int m3() {
return 3;
}
}
Completate il programma Esercizio1 per far in modo che stampi
2
class Esercizio1 {
public static void main(String[] args) {
A pippo = new A();
B pluto = new B();
System.out.println( .m );
}
}
Esercizio1 dell'attività 1 per far in modo
che stampi 4.Esercizio1 dell'attività 1 per far in modo
che stampi 1. Esiste un'unica soluzione?Esercizio1 dell'attività 1 per far in modo
che stampi 3.C che estende A tale che il
codice seguente stampi 2,6
class Esercizio1 {
public static void main(String[] args) {
C paperino = new C();
int x = paperino.m2();
int y = paperino.m3();
System.out.println(x+","+y);
}
}
A, B e C definite ai punti
precedenti, completare il codice della classe D (dovete sostituire
solo i puntini)
class D extends .... {
}
per fare in modo che il programma seguente stampi 2,6
class Esercizio1 {
public static void main(String[] args) {
D paperino = new D();
int x = paperino.m2();
int y = paperino.m3();
System.out.println(x+","+y);
}
}
class A ... {
public int m1() {
return 10;
}
}
class B ... {
public int m2() {
return 7;
}
}
class C ... {
public int m2() {
return 3;
}
public int m3() {
return 1;
}
}
per fare in modo che il programma Esercizio1 stampi 70
class Esercizio1 {
public static void main(String[] args) {
B paperinik = new B();
System.out.println(paperinik.m3()*paperinik.m2()*paperinik.m1());
}
}
Obiettivo: saper utilizzare la parola riservata super.
Attività:
class A {
protected int x;
public A(int x) {
this.x = x;
}
}
class B extends A {
public B(int x) {
...
}
}
cosa si deve sostituire ai puntini perché il compilatore non dia errore?
this.x = x;super.x = x;this(x);super(x);A(x);
class A {
protected int x;
public A() {
this.x = 3;
}
}
class B extends A {
public B(int x) {
...
}
}
cosa si deve sostituire ai puntini perché il compilatore non dia errore?
this.x = x;super.x = x;this();this(x);super();super(x);A();A?
class B extends A {
public String stampa() {
return "ciao ";
}
public String scrivi() {
return ..........;
}
public static void main(String[] args) {
A x = new A();
B y = new B();
System.out.println(x.stampa() + y.stampa());
System.out.println(y.scrivi());
}
}
verificate la vostra risposta con questa implementazione di A:
class A {
public String stampa() {
return "hello ";
}
}A e B, una estensione dell'altra, in modo che il seguente
programma stampi costruttore di B costruttore di A
class Esercizio2 {
public static void main(String[] args) {
A x = new A(3,3);
}
}
Suggerimento: i costruttori di entrambe le classi devono contenere
System.out.print("costruttore di ...");
Paolo Coppola