29.01.2015 Views

Download dell'intero lavoro - Provincia di Torino

Download dell'intero lavoro - Provincia di Torino

Download dell'intero lavoro - Provincia di Torino

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!