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 ...");