Download dell'intero lavoro - Provincia di Torino
Download dell'intero lavoro - Provincia di Torino
Download dell'intero lavoro - Provincia di Torino
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
ESEMPIO<br />
“COME”<br />
ESTENDERE UNA CLASSE<br />
class Animale {<br />
float Peso;<br />
…<br />
void Mangia () { … }<br />
…<br />
}<br />
class Mammifero extends Animale {<br />
int BattitoCar<strong>di</strong>aco;<br />
// ere<strong>di</strong>ta Peso<br />
…<br />
void Respira() { … }<br />
// ere<strong>di</strong>ta mangia<br />
…<br />
}<br />
class Gatto extends Mammifero {<br />
// ere<strong>di</strong>ta BattitoCar<strong>di</strong>aco, Peso, Mangia, Respira<br />
void FaLeFusa() { … }<br />
}<br />
Gatto Fufi = new Gatto();<br />
Animale creatura = Fufi;<br />
lecito, perchè “gatto”<br />
è una sottoclasse<br />
<strong>di</strong> “animale”<br />
• Attenzione alla <strong>di</strong>fferenza fra la relazione “è un”e la<br />
relazione “ha un” : solo la prima può definire una<br />
sottoclasse<br />
Esempio:<br />
Un cerchio può essere definito me<strong>di</strong>ante il suo centro e il suo<br />
raggio, ma sarebbe scorretto definire una classe cerchio come<br />
sottoclasse <strong>di</strong> punto:<br />
class punto { class cerchio extends punto {<br />
double x; int y; double raggio;<br />
… ...<br />
} }<br />
Introduzione al linguaggio Java 127<br />
Introduzione al linguaggio Java 128<br />
SHADOWING E OVERRIDING<br />
POLIMORFISMO<br />
• shadowing<br />
• overri<strong>di</strong>ng<br />
un campo <strong>di</strong> una sottoclasse può “nascondere”<br />
un campo omonimo <strong>di</strong> una sua<br />
superclasse<br />
un metodo <strong>di</strong> una sottoclasse può “sovrascrivere”<br />
un metodo <strong>di</strong> ugual “segnatura”<br />
e ugual ReturnType <strong>di</strong> una sua superclasse<br />
Esempio: class SuperClass {<br />
nasconde<br />
int i;<br />
sovrascrive<br />
void m(int k) {…}<br />
… }<br />
class Subclass extends Superclass {<br />
long i:<br />
void m(int n) {…}<br />
… }<br />
class Animale {<br />
…<br />
void Mangia () { … }<br />
…<br />
}<br />
class Mammifero extends Animale {<br />
…<br />
}<br />
class Gatto extends Mammifero {<br />
…<br />
void Mangia() { … }<br />
...<br />
}<br />
Gatto Fufi = new Gatto();<br />
Animale creatura =Fufi;<br />
creatura.Mangia();<br />
viene eseguito il metodo<br />
Mangia della classe Gatto!<br />
(bin<strong>di</strong>ng <strong>di</strong>namico: il metodo<br />
da chiamare viene selezionato<br />
a run-time)<br />
Introduzione al linguaggio Java 129<br />
Introduzione al linguaggio Java 130<br />
LA KEYWORD super<br />
CASTING<br />
• per denotare un membro nascosto (campo shadowed<br />
o metodo overridden non static), si può usare la<br />
keyword super<br />
Esempio: class SuperClass {<br />
int i;<br />
…<br />
}<br />
class Subclass extends SuperClass {<br />
long i:<br />
…<br />
i = super.i +1;<br />
…<br />
}<br />
Gatto Fufi = new Gatto();<br />
Animale creatura;<br />
...<br />
creatura = Fufi; /* ok */<br />
Fufi = creatura;<br />
/* errore <strong>di</strong> compilazione:<br />
tipi incompatibili */<br />
Fufi = (Gatto)creatura; /* ok, ma solo perchè<br />
creatura è un gatto: se<br />
non lo fosse, il controllo a<br />
run-time segnalrebbe una<br />
eccezione */<br />
Introduzione al linguaggio Java 131<br />
Introduzione al linguaggio Java 132<br />
Introduzione al linguaggio Java 22<br />
22