Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo...

169
Capitolo 8 Estensione delle classi c 2005 Pearson Education Italia Capitolo 8 - 1 / 111

Transcript of Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo...

Page 1: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Capitolo 8

Estensione delle classi

c© 2005 Pearson Education Italia Capitolo 8 - 1 / 111

Page 2: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Sommario: Estensione delle classi

1 Ereditarieta e implementazione di sottoclassiCostruttori e gerarchia delle classisuperOverloading e overridingIl metodo equals

2 Variabili e adombramento

3 Classi astratte

4 Implementazione della classe Rettangolo

5 Il modificatore protected

6 Il modificatore final

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 2 / 111

Page 3: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Estensione di una classe

E possibile estendere una classe senza conoscere nulladell’implementazione della classe estesa, ma solo il contratto

Esempio

class Quadrato extends Rettangolo {...

}

extends indica che:

la classe Quadrato e ottenuta dalla classe Rettangolo estendendonestato e comportamento

Quadrato e una sottoclasse di Rettangolo

Rettangolo e una superclasse di Quadrato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 4 / 111

Page 4: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Estensione di una classe

E possibile estendere una classe senza conoscere nulladell’implementazione della classe estesa, ma solo il contratto

Esempio

class Quadrato extends Rettangolo {...

}

extends indica che:

la classe Quadrato e ottenuta dalla classe Rettangolo estendendonestato e comportamento

Quadrato e una sottoclasse di Rettangolo

Rettangolo e una superclasse di Quadrato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 4 / 111

Page 5: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Estensione di una classe

E possibile estendere una classe senza conoscere nulladell’implementazione della classe estesa, ma solo il contratto

Esempio

class Quadrato extends Rettangolo {...

}

extends indica che:

la classe Quadrato e ottenuta dalla classe Rettangolo estendendonestato e comportamento

Quadrato e una sottoclasse di Rettangolo

Rettangolo e una superclasse di Quadrato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 4 / 111

Page 6: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Estensione di una classe

E possibile estendere una classe senza conoscere nulladell’implementazione della classe estesa, ma solo il contratto

Esempio

class Quadrato extends Rettangolo {...

}

extends indica che:

la classe Quadrato e ottenuta dalla classe Rettangolo estendendonestato e comportamento

Quadrato e una sottoclasse di Rettangolo

Rettangolo e una superclasse di Quadrato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 4 / 111

Page 7: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Ereditarieta

Esempio

class Quadrato extends Rettangolo {...

}

La classe Quadrato eredita (e quindi dispone) di tutti

i campii metodi

definiti nella classe Rettangolo

Cio non implica che questi membri siano accessibili nel codice diQuadrato (dipende dalla visibilita)

I costruttori non vengono ereditati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 6 / 111

Page 8: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Ereditarieta

Esempio

class Quadrato extends Rettangolo {...

}

La classe Quadrato eredita (e quindi dispone) di tutti

i campii metodi

definiti nella classe Rettangolo

Cio non implica che questi membri siano accessibili nel codice diQuadrato (dipende dalla visibilita)

I costruttori non vengono ereditati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 6 / 111

Page 9: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Ereditarieta

Esempio

class Quadrato extends Rettangolo {...

}

La classe Quadrato eredita (e quindi dispone) di tutti

i campii metodi

definiti nella classe Rettangolo

Cio non implica che questi membri siano accessibili nel codice diQuadrato (dipende dalla visibilita)

I costruttori non vengono ereditati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 6 / 111

Page 10: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I costruttori della sottoclasse

Costruzione di un oggetto

La costruzione di un oggetto di una sottoclasse avviene costruendo unoggetto della superclasse e adattandolo alle esigenze della sottoclasse

Esempio

public Quadrato(double x) {super(x, x);

}

superPer invocare un costruttore della superclasse nel costruttore di unasottoclasse diretta

In caso di overloading, il costruttore invocato viene riconosciuto inbase alla lista degli argomenti fornita a super

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 8 / 111

Page 11: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I costruttori della sottoclasse

Costruzione di un oggetto

La costruzione di un oggetto di una sottoclasse avviene costruendo unoggetto della superclasse e adattandolo alle esigenze della sottoclasse

Esempio

public Quadrato(double x) {super(x, x);

}

superPer invocare un costruttore della superclasse nel costruttore di unasottoclasse diretta

In caso di overloading, il costruttore invocato viene riconosciuto inbase alla lista degli argomenti fornita a super

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 8 / 111

Page 12: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I costruttori della sottoclasse

Costruzione di un oggetto

La costruzione di un oggetto di una sottoclasse avviene costruendo unoggetto della superclasse e adattandolo alle esigenze della sottoclasse

Esempio

public Quadrato(double x) {super(x, x);

}

superPer invocare un costruttore della superclasse nel costruttore di unasottoclasse diretta

In caso di overloading, il costruttore invocato viene riconosciuto inbase alla lista degli argomenti fornita a super

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 8 / 111

Page 13: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

La classe Quadrato

public class Quadrato extends Rettangolo {

public Quadrato(double x) {super(x, x);

}

public double getLato() {return getBase();

}

public String toString() {return "lato = " + getLato();

}

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 10 / 111

Page 14: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori e gerarchia delle classi

Generalmente un costruttore non opera da solo, ma si avvale dell’ausilio di:

(1) un altro costruttore della stessa classe

public Frazione(int x) {this(x, 1);

}

(2) un costruttore della superclasse

public Quadrato(double x) {super(x, x);

}

L’invocazione di un costruttore tramite this o super dev’essere la primaistruzione del costruttore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 12 / 111

Page 15: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori e gerarchia delle classi

Generalmente un costruttore non opera da solo, ma si avvale dell’ausilio di:

(1) un altro costruttore della stessa classe

public Frazione(int x) {this(x, 1);

}

(2) un costruttore della superclasse

public Quadrato(double x) {super(x, x);

}

L’invocazione di un costruttore tramite this o super dev’essere la primaistruzione del costruttore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 12 / 111

Page 16: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori e gerarchia delle classi

Generalmente un costruttore non opera da solo, ma si avvale dell’ausilio di:

(1) un altro costruttore della stessa classe

public Frazione(int x) {this(x, 1);

}

(2) un costruttore della superclasse

public Quadrato(double x) {super(x, x);

}

L’invocazione di un costruttore tramite this o super dev’essere la primaistruzione del costruttore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 12 / 111

Page 17: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori

Se in una classe non sidefiniscono costruttori

viene automaticamente aggiuntoun costruttore privo di argomenti (eprivo di codice)

Se un costruttore non ne in-voca esplicitamente un altrotramite this o super

come prima istruzione viene auto-maticamente invocato il costruttoreprivo di argomenti della superclasse

Eccezione

Il costruttore della classe Object predispone l’oggetto senza alcun ausilio.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 13 / 111

Page 18: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori

Se in una classe non sidefiniscono costruttori

viene automaticamente aggiuntoun costruttore privo di argomenti (eprivo di codice)

Se un costruttore non ne in-voca esplicitamente un altrotramite this o super

come prima istruzione viene auto-maticamente invocato il costruttoreprivo di argomenti della superclasse

Eccezione

Il costruttore della classe Object predispone l’oggetto senza alcun ausilio.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 13 / 111

Page 19: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori

Se in una classe non sidefiniscono costruttori

viene automaticamente aggiuntoun costruttore privo di argomenti (eprivo di codice)

Se un costruttore non ne in-voca esplicitamente un altrotramite this o super

come prima istruzione viene auto-maticamente invocato il costruttoreprivo di argomenti della superclasse

Eccezione

Il costruttore della classe Object predispone l’oggetto senza alcun ausilio.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 13 / 111

Page 20: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori

Se in una classe non sidefiniscono costruttori

viene automaticamente aggiuntoun costruttore privo di argomenti (eprivo di codice)

Se un costruttore non ne in-voca esplicitamente un altrotramite this o super

come prima istruzione viene auto-maticamente invocato il costruttoreprivo di argomenti della superclasse

Eccezione

Il costruttore della classe Object predispone l’oggetto senza alcun ausilio.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 13 / 111

Page 21: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Costruttori

Se in una classe non sidefiniscono costruttori

viene automaticamente aggiuntoun costruttore privo di argomenti (eprivo di codice)

Se un costruttore non ne in-voca esplicitamente un altrotramite this o super

come prima istruzione viene auto-maticamente invocato il costruttoreprivo di argomenti della superclasse

Eccezione

Il costruttore della classe Object predispone l’oggetto senza alcun ausilio.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 13 / 111

Page 22: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Nell’implementazione della classe A non e stato scritto esplicitamentealcun costruttore...

...il compilatore aggiunge:

public A() {super();

}

Importante

Se la superclasse di A non dispone di un costruttore privo di argomenti, ilcompilatore segnalera un errore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 15 / 111

Page 23: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Nell’implementazione della classe A non e stato scritto esplicitamentealcun costruttore...

...il compilatore aggiunge:

public A() {super();

}

Importante

Se la superclasse di A non dispone di un costruttore privo di argomenti, ilcompilatore segnalera un errore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 15 / 111

Page 24: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Nell’implementazione della classe A non e stato scritto esplicitamentealcun costruttore...

...il compilatore aggiunge:

public A() {super();

}

Importante

Se la superclasse di A non dispone di un costruttore privo di argomenti, ilcompilatore segnalera un errore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 15 / 111

Page 25: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

La classe Quadrato ha un costruttore con un argomento.

Quindi il costruttore privo di argomenti non viene aggiuntoautomaticamente

Se aggiungiamo il costruttore:

public Quadrato() {}

il compilatore segnalera un errore

questo costruttore invoca (implicitamente) super(), ma Rettangolonon ha un costruttore privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 17 / 111

Page 26: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

La classe Quadrato ha un costruttore con un argomento.

Quindi il costruttore privo di argomenti non viene aggiuntoautomaticamente

Se aggiungiamo il costruttore:

public Quadrato() {}

il compilatore segnalera un errore

questo costruttore invoca (implicitamente) super(), ma Rettangolonon ha un costruttore privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 17 / 111

Page 27: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

La classe Quadrato ha un costruttore con un argomento.

Quindi il costruttore privo di argomenti non viene aggiuntoautomaticamente

Se aggiungiamo il costruttore:

public Quadrato() {}

il compilatore segnalera un errore

questo costruttore invoca (implicitamente) super(), ma Rettangolonon ha un costruttore privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 17 / 111

Page 28: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio: Quadrato

Una possibile definizione del costruttore privo di argomenti

public Quadrato() {this(0);

}

oppure

public Quadrato() {super(0, 0);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 19 / 111

Page 29: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio: Quadrato

Una possibile definizione del costruttore privo di argomenti

public Quadrato() {this(0);

}

oppure

public Quadrato() {super(0, 0);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 19 / 111

Page 30: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio: Quadrato

Una possibile definizione del costruttore privo di argomenti

public Quadrato() {this(0);

}

oppure

public Quadrato() {super(0, 0);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 19 / 111

Page 31: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio: Quadrato

Una possibile definizione del costruttore privo di argomenti

public Quadrato() {this(0);

}

oppure

public Quadrato() {super(0, 0);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 19 / 111

Page 32: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super: due utilizzi...

(1) Come costruttorePer richiamare un costruttore della superclasse nel codice delcostruttore della sottoclasse

(2) Come pseudovariabile

(a) per invocare un metodo della superclasse nel codice della sottoclasse

la ricerca del metodo da eseguire non parte dalla classe effettivadell’oggetto, ma dalla superclasse della classe in cui e scrittal’invocazione stessa

(b) per accedere ai campi della superclasse

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 20 / 111

Page 33: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super: due utilizzi...

(1) Come costruttorePer richiamare un costruttore della superclasse nel codice delcostruttore della sottoclasse

(2) Come pseudovariabile

(a) per invocare un metodo della superclasse nel codice della sottoclasse

la ricerca del metodo da eseguire non parte dalla classe effettivadell’oggetto, ma dalla superclasse della classe in cui e scrittal’invocazione stessa

(b) per accedere ai campi della superclasse

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 20 / 111

Page 34: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super: due utilizzi...

(1) Come costruttorePer richiamare un costruttore della superclasse nel codice delcostruttore della sottoclasse

(2) Come pseudovariabile

(a) per invocare un metodo della superclasse nel codice della sottoclasse

la ricerca del metodo da eseguire non parte dalla classe effettivadell’oggetto, ma dalla superclasse della classe in cui e scrittal’invocazione stessa

(b) per accedere ai campi della superclasse

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 20 / 111

Page 35: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super: due utilizzi...

(1) Come costruttorePer richiamare un costruttore della superclasse nel codice delcostruttore della sottoclasse

(2) Come pseudovariabile

(a) per invocare un metodo della superclasse nel codice della sottoclasse

la ricerca del metodo da eseguire non parte dalla classe effettivadell’oggetto, ma dalla superclasse della classe in cui e scrittal’invocazione stessa

(b) per accedere ai campi della superclasse

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 20 / 111

Page 36: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Potremmo aggiungere a Quadrato i metodi:

public String getDescrizione1() {return this.toString();

}

public String getDescrizione2() {return super.toString();

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 22 / 111

Page 37: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Potremmo aggiungere a Quadrato i metodi:

public String getDescrizione1() {return this.toString();

}

public String getDescrizione2() {return super.toString();

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 22 / 111

Page 38: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overloading

Overloading

La possibilita di avere metodi o costruttori con lo stesso nome masegnatura diversa.

Segnatura = nome del metodo e lista dei tipi dei suoi argomenti

L’overloading viene risolto in fase di compilazione

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 23 / 111

Page 39: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overloading

Overloading

La possibilita di avere metodi o costruttori con lo stesso nome masegnatura diversa.

Segnatura = nome del metodo e lista dei tipi dei suoi argomenti

L’overloading viene risolto in fase di compilazione

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 23 / 111

Page 40: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overloading

Overloading

La possibilita di avere metodi o costruttori con lo stesso nome masegnatura diversa.

Segnatura = nome del metodo e lista dei tipi dei suoi argomenti

L’overloading viene risolto in fase di compilazione

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 23 / 111

Page 41: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

public static double valoreAssoluto(double x) {if (x > 0)

return x;else

return -x;}

public static int valoreAssoluto(int x) {return (int) valoreAssoluto((double) x);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 25 / 111

Page 42: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

public static double valoreAssoluto(double x) {if (x > 0)

return x;else

return -x;}

public static int valoreAssoluto(int x) {return (int) valoreAssoluto((double) x);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 25 / 111

Page 43: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Compilazione: scelta della segnatura

In compilazione viene scelta la segnatura del metodo da eseguire in base:

(1) al tipo del riferimento utilizzato per invocare il metodo

(2) al tipo degli argomenti indicati nella chiamata

Esempio

A r;...r.m(2)

Il compilatore cerca fra tutte le segnature di metodi di nome mdisponibili per il tipo A . . .

. . . quella “piu adatta” per gli argomenti specificati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 27 / 111

Page 44: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Compilazione: scelta della segnatura

In compilazione viene scelta la segnatura del metodo da eseguire in base:

(1) al tipo del riferimento utilizzato per invocare il metodo

(2) al tipo degli argomenti indicati nella chiamata

Esempio

A r;...r.m(2)

Il compilatore cerca fra tutte le segnature di metodi di nome mdisponibili per il tipo A . . .

. . . quella “piu adatta” per gli argomenti specificati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 27 / 111

Page 45: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Compilazione: scelta della segnatura

In compilazione viene scelta la segnatura del metodo da eseguire in base:

(1) al tipo del riferimento utilizzato per invocare il metodo

(2) al tipo degli argomenti indicati nella chiamata

Esempio

A r;...r.m(2)

Il compilatore cerca fra tutte le segnature di metodi di nome mdisponibili per il tipo A . . .

. . . quella “piu adatta” per gli argomenti specificati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 27 / 111

Page 46: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Compilazione: scelta della segnatura

In compilazione viene scelta la segnatura del metodo da eseguire in base:

(1) al tipo del riferimento utilizzato per invocare il metodo

(2) al tipo degli argomenti indicati nella chiamata

Esempio

A r;...r.m(2)

Il compilatore cerca fra tutte le segnature di metodi di nome mdisponibili per il tipo A . . .

. . . quella “piu adatta” per gli argomenti specificati

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 27 / 111

Page 47: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

A r;...r.m(2)

Se le segnature disponibili per il tipo A sono:

int m(byte b)int m(long l)int m(double d)

il compilatore sceglie la seconda

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 29 / 111

Page 48: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overriding

Overriding

Quando si riscrive in una sottoclasse un metodo della superclasse con lastessa segnatura.

L’overriding viene risolto in fase di esecuzione

Compilazionescelta della segnatura

il compilatore stabilisce la segnatura delmetodo da eseguire (early binding)

Esecuzionescelta del metodo

Il metodo da eseguire, tra quelli con lasegnatura selezionata, viene scelto al mo-mento dell’esecuzione, sulla base del tipodell’oggetto (late binding)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 30 / 111

Page 49: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overriding

Overriding

Quando si riscrive in una sottoclasse un metodo della superclasse con lastessa segnatura.

L’overriding viene risolto in fase di esecuzione

Compilazionescelta della segnatura

il compilatore stabilisce la segnatura delmetodo da eseguire (early binding)

Esecuzionescelta del metodo

Il metodo da eseguire, tra quelli con lasegnatura selezionata, viene scelto al mo-mento dell’esecuzione, sulla base del tipodell’oggetto (late binding)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 30 / 111

Page 50: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overriding

Overriding

Quando si riscrive in una sottoclasse un metodo della superclasse con lastessa segnatura.

L’overriding viene risolto in fase di esecuzione

Compilazionescelta della segnatura

il compilatore stabilisce la segnatura delmetodo da eseguire (early binding)

Esecuzionescelta del metodo

Il metodo da eseguire, tra quelli con lasegnatura selezionata, viene scelto al mo-mento dell’esecuzione, sulla base del tipodell’oggetto (late binding)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 30 / 111

Page 51: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Overriding

Overriding

Quando si riscrive in una sottoclasse un metodo della superclasse con lastessa segnatura.

L’overriding viene risolto in fase di esecuzione

Compilazionescelta della segnatura

il compilatore stabilisce la segnatura delmetodo da eseguire (early binding)

Esecuzionescelta del metodo

Il metodo da eseguire, tra quelli con lasegnatura selezionata, viene scelto al mo-mento dell’esecuzione, sulla base del tipodell’oggetto (late binding)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 30 / 111

Page 52: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione

(1) Scelta delle segnature “candidate”

Il compilatore individua le segnature che possono soddisfare lachiamata

(a) compatibile con gli argomenti utilizzati nella chiamata

il numero dei parametri nella segnatura e uguale al numero degliargomenti utilizzatiogni argomento e di un tipo assegnabile al corrispondenteparametro

(b) accessibile al codice chiamante

Se non esistono segnature candidate, il compilatore segnala un errore.

(2) Scelta della segnatura “piu specifica”

Tra le segnature candidate, il compilatore seleziona quella che richiedeil minor numero di promozioni

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 32 / 111

Page 53: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione

(1) Scelta delle segnature “candidate”

Il compilatore individua le segnature che possono soddisfare lachiamata

(a) compatibile con gli argomenti utilizzati nella chiamata

il numero dei parametri nella segnatura e uguale al numero degliargomenti utilizzatiogni argomento e di un tipo assegnabile al corrispondenteparametro

(b) accessibile al codice chiamante

Se non esistono segnature candidate, il compilatore segnala un errore.

(2) Scelta della segnatura “piu specifica”

Tra le segnature candidate, il compilatore seleziona quella che richiedeil minor numero di promozioni

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 32 / 111

Page 54: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione

(1) Scelta delle segnature “candidate”

Il compilatore individua le segnature che possono soddisfare lachiamata

(a) compatibile con gli argomenti utilizzati nella chiamata

il numero dei parametri nella segnatura e uguale al numero degliargomenti utilizzatiogni argomento e di un tipo assegnabile al corrispondenteparametro

(b) accessibile al codice chiamante

Se non esistono segnature candidate, il compilatore segnala un errore.

(2) Scelta della segnatura “piu specifica”

Tra le segnature candidate, il compilatore seleziona quella che richiedeil minor numero di promozioni

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 32 / 111

Page 55: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione

(1) Scelta delle segnature “candidate”

Il compilatore individua le segnature che possono soddisfare lachiamata

(a) compatibile con gli argomenti utilizzati nella chiamata

il numero dei parametri nella segnatura e uguale al numero degliargomenti utilizzatiogni argomento e di un tipo assegnabile al corrispondenteparametro

(b) accessibile al codice chiamante

Se non esistono segnature candidate, il compilatore segnala un errore.

(2) Scelta della segnatura “piu specifica”

Tra le segnature candidate, il compilatore seleziona quella che richiedeil minor numero di promozioni

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 32 / 111

Page 56: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

C gamma;

- gamma.toString()

Una segnatura candidata: toString

- gamma.equals(alfa)

equals con parametro di tipo Object (ereditatoda Object)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 34 / 111

Page 57: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

C gamma;

- gamma.toString()

Una segnatura candidata: toString

- gamma.equals(alfa)

equals con parametro di tipo Object (ereditatoda Object)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 34 / 111

Page 58: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

C gamma;

- gamma.toString()

Una segnatura candidata: toString

- gamma.equals(alfa)

equals con parametro di tipo Object (ereditatoda Object)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 34 / 111

Page 59: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

C gamma;

- gamma.toString()

Una segnatura candidata: toString

- gamma.equals(alfa)

equals con parametro di tipo Object (ereditatoda Object)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 34 / 111

Page 60: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

C gamma;

- gamma.toString()

Una segnatura candidata: toString

- gamma.equals(alfa)

equals con parametro di tipo Object (ereditatoda Object)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 34 / 111

Page 61: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

A alfa;

- alfa.assegna(2)

Una segnatura candidata: assegna(long x)

- alfa.assegna(2.0)

Nessuna segnatura candidata (errore)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 36 / 111

Page 62: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

A alfa;

- alfa.assegna(2)

Una segnatura candidata: assegna(long x)

- alfa.assegna(2.0)

Nessuna segnatura candidata (errore)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 36 / 111

Page 63: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

A alfa;

- alfa.assegna(2)

Una segnatura candidata: assegna(long x)

- alfa.assegna(2.0)

Nessuna segnatura candidata (errore)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 36 / 111

Page 64: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

B beta;

- beta.assegna(2)

Tre segnature candidate:

assegna(int x)assegna(double x)assegna(long x)

La piu specifica e assegna(int x)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 38 / 111

Page 65: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di compilazione: scelta della segnatura

B beta;

- beta.assegna(2)

Tre segnature candidate:

assegna(int x)assegna(double x)assegna(long x)

La piu specifica e assegna(int x)

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 38 / 111

Page 66: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Ambiguita

Se per l’invocazione:

z(1, 2)

le segnature candidate sono:

z(double x, int y)z(int x, double y)

Il compilatore non e in grado di individuare la segnatura piu specifica esegnala un messaggio di errore

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 40 / 111

Page 67: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di esecuzione: scelta del metodo

La JVM sceglie il metodo da eseguire sulla base del tipo dell’oggetto usatonell’invocazione

cerca un metodo con la segnatura selezionata in fase di compilazione

risalendo la gerarchia delle classi a partire dalla classe dell’oggetto chedeve eseguire il metodo

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 41 / 111

Page 68: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di esecuzione: scelta del metodo

La JVM sceglie il metodo da eseguire sulla base del tipo dell’oggetto usatonell’invocazione

cerca un metodo con la segnatura selezionata in fase di compilazione

risalendo la gerarchia delle classi a partire dalla classe dell’oggetto chedeve eseguire il metodo

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 41 / 111

Page 69: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Fase di esecuzione: scelta del metodo

La JVM sceglie il metodo da eseguire sulla base del tipo dell’oggetto usatonell’invocazione

cerca un metodo con la segnatura selezionata in fase di compilazione

risalendo la gerarchia delle classi a partire dalla classe dell’oggetto chedeve eseguire il metodo

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 41 / 111

Page 70: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 42 / 111

Page 71: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 43 / 111

Page 72: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 44 / 111

Page 73: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 45 / 111

Page 74: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Il metodo equals

Classe Object: public boolean equals(Object o)

Basato sull’assunzione che un oggetto e uguale a se stesso.

public boolean equals(Object o) {return this == o;

}

Classe Frazione: public boolean equals(Frazione f)

public boolean equals(Frazione f) {return this.num == f.num && this.den == f.den;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 47 / 111

Page 75: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Il metodo equals

Classe Object: public boolean equals(Object o)Basato sull’assunzione che un oggetto e uguale a se stesso.

public boolean equals(Object o) {return this == o;

}

Classe Frazione: public boolean equals(Frazione f)

public boolean equals(Frazione f) {return this.num == f.num && this.den == f.den;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 47 / 111

Page 76: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Il metodo equals

Classe Object: public boolean equals(Object o)Basato sull’assunzione che un oggetto e uguale a se stesso.

public boolean equals(Object o) {return this == o;

}

Classe Frazione: public boolean equals(Frazione f)

public boolean equals(Frazione f) {return this.num == f.num && this.den == f.den;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 47 / 111

Page 77: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Il metodo equals

Classe Object: public boolean equals(Object o)Basato sull’assunzione che un oggetto e uguale a se stesso.

public boolean equals(Object o) {return this == o;

}

Classe Frazione: public boolean equals(Frazione f)

public boolean equals(Frazione f) {return this.num == f.num && this.den == f.den;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 47 / 111

Page 78: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Frazione f1, f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 49 / 111

Page 79: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Frazione f1, f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 49 / 111

Page 80: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Object f1, f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 51 / 111

Page 81: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Object f1, f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 51 / 111

Page 82: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Object f1;Frazione f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 53 / 111

Page 83: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Object f1;Frazione f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 53 / 111

Page 84: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Frazione f1;Object f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 55 / 111

Page 85: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Frazione f1;Object f2;...if (f1.equals(f2))out.println("Le due frazioni sono uguali");

elseout.println("Le due frazioni sono diverse");

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 55 / 111

Page 86: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Se vogliamo che il comportamento sia corretto dobbiamo sovrascrivere ilmetodo equals(Object o) nella classe Frazione.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 56 / 111

Page 87: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

Se vogliamo che il comportamento sia corretto dobbiamo sovrascrivere ilmetodo equals(Object o) nella classe Frazione.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 56 / 111

Page 88: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I metodi equals di Frazione

public boolean equals(Frazione f) {return this.num == f.num && this.den == f.den;

}

public boolean equals(Object o) {if (o instanceof Frazione) {Frazione altra = (Frazione) o;return this.equals(altra);

} elsereturn false;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 58 / 111

Page 89: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I metodi equals di Frazione

public boolean equals(Frazione f) {return this.num == f.num && this.den == f.den;

}

public boolean equals(Object o) {if (o instanceof Frazione) {Frazione altra = (Frazione) o;return this.equals(altra);

} elsereturn false;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 58 / 111

Page 90: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Sommario: Estensione delle classi

1 Ereditarieta e implementazione di sottoclassiCostruttori e gerarchia delle classisuperOverloading e overridingIl metodo equals

2 Variabili e adombramento

3 Classi astratte

4 Implementazione della classe Rettangolo

5 Il modificatore protected

6 Il modificatore final

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 59 / 111

Page 91: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}}

public class Sotto extends Sopra {int k = 2;

public String toString() {return k + ", " + super.toString();

}}

Sotto: la variabile k adombra la variabile k di Sopra

La variabile utilizzata da un’istruzione dipende dal contesto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 61 / 111

Page 92: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}} public class Sotto extends Sopra {

int k = 2;

public String toString() {return k + ", " + super.toString();

}}

Sotto: la variabile k adombra la variabile k di Sopra

La variabile utilizzata da un’istruzione dipende dal contesto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 61 / 111

Page 93: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}} public class Sotto extends Sopra {

int k = 2;

public String toString() {return k + ", " + super.toString();

}}

Sotto: la variabile k adombra la variabile k di Sopra

La variabile utilizzata da un’istruzione dipende dal contesto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 61 / 111

Page 94: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}} public class Sotto extends Sopra {

int k = 2;

public String toString() {return k + ", " + super.toString();

}}

Sotto: la variabile k adombra la variabile k di Sopra

La variabile utilizzata da un’istruzione dipende dal contesto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 61 / 111

Page 95: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super per accedere ai campi della superclasse

E possibile accedere al campo adombrato della superclasse mediantesuper (a patto che non sia private).

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}} public class Sotto extends Sopra {

int k = 2;

public String toString() {return k + ", " + super.k;

}}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 63 / 111

Page 96: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super per accedere ai campi della superclasse

E possibile accedere al campo adombrato della superclasse mediantesuper (a patto che non sia private).

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}}

public class Sotto extends Sopra {int k = 2;

public String toString() {return k + ", " + super.k;

}}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 63 / 111

Page 97: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

super per accedere ai campi della superclasse

E possibile accedere al campo adombrato della superclasse mediantesuper (a patto che non sia private).

public class Sopra {int k = 1;

public String toString() {return String.valueOf(k);

}} public class Sotto extends Sopra {

int k = 2;

public String toString() {return k + ", " + super.k;

}}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 63 / 111

Page 98: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

//CAMPIprivate int ore;private int min;

public Orario(int ore, int min) {this.ore = ore;this.min = min;

}

I parametri formali adombrano i campi ore e min all’interno delcostruttore

this.ore specifica il campo dell’oggetto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 65 / 111

Page 99: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

//CAMPIprivate int ore;private int min;

public Orario(int ore, int min) {this.ore = ore;this.min = min;

}

I parametri formali adombrano i campi ore e min all’interno delcostruttore

this.ore specifica il campo dell’oggetto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 65 / 111

Page 100: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

//CAMPIprivate int x;

public void m(double y) {int x = (int)y.;this.x = y;

}

La variabile locale adombra il campo x all’interno del metodo

this.x specifica il campo dell’oggetto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 67 / 111

Page 101: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Variabili e adombramento

//CAMPIprivate int x;

public void m(double y) {int x = (int)y.;this.x = y;

}

La variabile locale adombra il campo x all’interno del metodo

this.x specifica il campo dell’oggetto

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 67 / 111

Page 102: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Sommario: Estensione delle classi

1 Ereditarieta e implementazione di sottoclassiCostruttori e gerarchia delle classisuperOverloading e overridingIl metodo equals

2 Variabili e adombramento

3 Classi astratte

4 Implementazione della classe Rettangolo

5 Il modificatore protected

6 Il modificatore final

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 68 / 111

Page 103: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Classi astratte

Dichiarate mediante la parola chiave abstract prima di class

public abstract class Figura {...

}

Non e possibile costruire oggetti di una classe astratta

Una classe astratta puo avere tutti i membri di una classe concreta

I costruttori della classe astratta vengono utilizzati nella costruzione diun oggetto di una sottoclasse esattamente come per le classi concrete

Se una classe ha un metodo abstract allora deve essere dichiarataastratta

E possibile definire astratta una classe anche se non ha metodi astratti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 70 / 111

Page 104: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Classi astratte

Dichiarate mediante la parola chiave abstract prima di class

public abstract class Figura {...

}

Non e possibile costruire oggetti di una classe astratta

Una classe astratta puo avere tutti i membri di una classe concreta

I costruttori della classe astratta vengono utilizzati nella costruzione diun oggetto di una sottoclasse esattamente come per le classi concrete

Se una classe ha un metodo abstract allora deve essere dichiarataastratta

E possibile definire astratta una classe anche se non ha metodi astratti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 70 / 111

Page 105: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Classi astratte

Dichiarate mediante la parola chiave abstract prima di class

public abstract class Figura {...

}

Non e possibile costruire oggetti di una classe astratta

Una classe astratta puo avere tutti i membri di una classe concreta

I costruttori della classe astratta vengono utilizzati nella costruzione diun oggetto di una sottoclasse esattamente come per le classi concrete

Se una classe ha un metodo abstract allora deve essere dichiarataastratta

E possibile definire astratta una classe anche se non ha metodi astratti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 70 / 111

Page 106: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Classi astratte

Dichiarate mediante la parola chiave abstract prima di class

public abstract class Figura {...

}

Non e possibile costruire oggetti di una classe astratta

Una classe astratta puo avere tutti i membri di una classe concreta

I costruttori della classe astratta vengono utilizzati nella costruzione diun oggetto di una sottoclasse esattamente come per le classi concrete

Se una classe ha un metodo abstract allora deve essere dichiarataastratta

E possibile definire astratta una classe anche se non ha metodi astratti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 70 / 111

Page 107: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Classi astratte

Dichiarate mediante la parola chiave abstract prima di class

public abstract class Figura {...

}

Non e possibile costruire oggetti di una classe astratta

Una classe astratta puo avere tutti i membri di una classe concreta

I costruttori della classe astratta vengono utilizzati nella costruzione diun oggetto di una sottoclasse esattamente come per le classi concrete

Se una classe ha un metodo abstract allora deve essere dichiarataastratta

E possibile definire astratta una classe anche se non ha metodi astratti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 70 / 111

Page 108: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Classi astratte

Dichiarate mediante la parola chiave abstract prima di class

public abstract class Figura {...

}

Non e possibile costruire oggetti di una classe astratta

Una classe astratta puo avere tutti i membri di una classe concreta

I costruttori della classe astratta vengono utilizzati nella costruzione diun oggetto di una sottoclasse esattamente come per le classi concrete

Se una classe ha un metodo abstract allora deve essere dichiarataastratta

E possibile definire astratta una classe anche se non ha metodi astratti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 70 / 111

Page 109: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

La classe Figura

public abstract class Figura {

public abstract double getArea();

public abstract double getPerimetro();

public boolean haAreaMaggiore(Figura altra) {return this.getArea() > altra.getArea();

}

public boolean haPerimetroMaggiore(Figura altra) {return this.getPerimetro() > altra.getPerimetro();

}}

Figura estende implicitamente Object

Ha un costruttore di default privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 72 / 111

Page 110: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

La classe Figura

public abstract class Figura {

public abstract double getArea();

public abstract double getPerimetro();

public boolean haAreaMaggiore(Figura altra) {return this.getArea() > altra.getArea();

}

public boolean haPerimetroMaggiore(Figura altra) {return this.getPerimetro() > altra.getPerimetro();

}}

Figura estende implicitamente Object

Ha un costruttore di default privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 72 / 111

Page 111: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

La classe Figura

public abstract class Figura {

public abstract double getArea();

public abstract double getPerimetro();

public boolean haAreaMaggiore(Figura altra) {return this.getArea() > altra.getArea();

}

public boolean haPerimetroMaggiore(Figura altra) {return this.getPerimetro() > altra.getPerimetro();

}}

Figura estende implicitamente Object

Ha un costruttore di default privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 72 / 111

Page 112: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

La classe Figura

public abstract class Figura {

public abstract double getArea();

public abstract double getPerimetro();

public boolean haAreaMaggiore(Figura altra) {return this.getArea() > altra.getArea();

}

public boolean haPerimetroMaggiore(Figura altra) {return this.getPerimetro() > altra.getPerimetro();

}}

Figura estende implicitamente Object

Ha un costruttore di default privo di argomenti

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 72 / 111

Page 113: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Sommario: Estensione delle classi

1 Ereditarieta e implementazione di sottoclassiCostruttori e gerarchia delle classisuperOverloading e overridingIl metodo equals

2 Variabili e adombramento

3 Classi astratte

4 Implementazione della classe Rettangolo

5 Il modificatore protected

6 Il modificatore final

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 73 / 111

Page 114: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: campi e costruttore

public class Rettangolo extends Figura {//CAMPIprivate double base, altezza;

//COSTRUTTORIpublic Rettangolo (double x, double y) {base = x;altezza = y;

}

//METODI...

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 75 / 111

Page 115: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: campi e costruttore

public class Rettangolo extends Figura {//CAMPIprivate double base, altezza;

//COSTRUTTORIpublic Rettangolo (double x, double y) {base = x;altezza = y;

}

//METODI...

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 75 / 111

Page 116: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Implementazione dei metodi astratti di Figura

public double getArea() {return base * altezza;

}

public double getPerimetro() {return 2 * (base + altezza);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 77 / 111

Page 117: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Implementazione dei metodi astratti di Figura

public double getArea() {return base * altezza;

}

public double getPerimetro() {return 2 * (base + altezza);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 77 / 111

Page 118: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: metodi di accesso e toString

public double getAltezza() {return altezza;

}

public double getBase() {return base;

}

public String toString() {return "base = " + base + ", altezza = " + altezza;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 79 / 111

Page 119: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: metodi di accesso e toString

public double getAltezza() {return altezza;

}

public double getBase() {return base;

}

public String toString() {return "base = " + base + ", altezza = " + altezza;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 79 / 111

Page 120: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: metodi di accesso e toString

public double getAltezza() {return altezza;

}

public double getBase() {return base;

}

public String toString() {return "base = " + base + ", altezza = " + altezza;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 79 / 111

Page 121: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: metodi equals

public boolean equals(Rettangolo altro) {return this.base == altro.base &&

this.altezza == altro.altezza;}

public boolean equals(Object o) {if (o instanceof Rettangolo) {Rettangolo a = (Rettangolo) o;return equals(a);

} elsereturn false;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 81 / 111

Page 122: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: metodi equals

public boolean equals(Rettangolo altro) {return this.base == altro.base &&

this.altezza == altro.altezza;}

public boolean equals(Object o) {if (o instanceof Rettangolo) {Rettangolo a = (Rettangolo) o;return equals(a);

} elsereturn false;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 81 / 111

Page 123: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I metodi equals di Quadrato

Quadrato eredita i metodi da Rettangolo

Rettangolo r = new Rettangolo(4, 4);Quadrato q = new Quadrato(4);if (q.equals(r))out.println("uguali");

elseout.println("diversi");

Dal punto di vista della gerarchia gli oggetti riferiti da r e da q sonodiversi, dal punto di vista geometrico rappresentano la stessa figura

Privilegiamo il punto di vista geometrico

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 83 / 111

Page 124: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I metodi equals di Quadrato

Quadrato eredita i metodi da Rettangolo

Rettangolo r = new Rettangolo(4, 4);Quadrato q = new Quadrato(4);if (q.equals(r))out.println("uguali");

elseout.println("diversi");

Dal punto di vista della gerarchia gli oggetti riferiti da r e da q sonodiversi, dal punto di vista geometrico rappresentano la stessa figura

Privilegiamo il punto di vista geometrico

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 83 / 111

Page 125: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I metodi equals di Quadrato

Quadrato eredita i metodi da Rettangolo

Rettangolo r = new Rettangolo(4, 4);Quadrato q = new Quadrato(4);if (q.equals(r))out.println("uguali");

elseout.println("diversi");

Dal punto di vista della gerarchia gli oggetti riferiti da r e da q sonodiversi, dal punto di vista geometrico rappresentano la stessa figura

Privilegiamo il punto di vista geometrico

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 83 / 111

Page 126: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

I metodi equals di Quadrato

Quadrato eredita i metodi da Rettangolo

Rettangolo r = new Rettangolo(4, 4);Quadrato q = new Quadrato(4);if (q.equals(r))out.println("uguali");

elseout.println("diversi");

Dal punto di vista della gerarchia gli oggetti riferiti da r e da q sonodiversi, dal punto di vista geometrico rappresentano la stessa figura

Privilegiamo il punto di vista geometrico

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 83 / 111

Page 127: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: cambiaBase

public void cambiaBase(double x) {base = x;return;

}

L’istruzione return puo essere omessa

public void cambiaBase(double x) {base = x;

}

public void cambiaAltezza(double x) {altezza = x;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 85 / 111

Page 128: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: cambiaBase

public void cambiaBase(double x) {base = x;return;

}

L’istruzione return puo essere omessa

public void cambiaBase(double x) {base = x;

}

public void cambiaAltezza(double x) {altezza = x;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 85 / 111

Page 129: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Rettangolo: cambiaBase

public void cambiaBase(double x) {base = x;return;

}

L’istruzione return puo essere omessa

public void cambiaBase(double x) {base = x;

}

public void cambiaAltezza(double x) {altezza = x;

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 85 / 111

Page 130: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: metodo cambiaLato

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Quadrato eredita da Rettangolo anche i metodi cambiaBase ecambiaAltezza

L’uso di questi metodi consente di costruire oggetti inconsistenti

Quadrato q = new Quadrato(4);q.cambiaBase(3);double area = q.getArea(); //area = 12

Li ridefiniamo in modo che questo non avvenga

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 87 / 111

Page 131: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: metodo cambiaLato

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Quadrato eredita da Rettangolo anche i metodi cambiaBase ecambiaAltezza

L’uso di questi metodi consente di costruire oggetti inconsistenti

Quadrato q = new Quadrato(4);q.cambiaBase(3);double area = q.getArea(); //area = 12

Li ridefiniamo in modo che questo non avvenga

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 87 / 111

Page 132: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: metodo cambiaLato

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Quadrato eredita da Rettangolo anche i metodi cambiaBase ecambiaAltezza

L’uso di questi metodi consente di costruire oggetti inconsistenti

Quadrato q = new Quadrato(4);q.cambiaBase(3);double area = q.getArea(); //area = 12

Li ridefiniamo in modo che questo non avvenga

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 87 / 111

Page 133: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: metodo cambiaLato

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Quadrato eredita da Rettangolo anche i metodi cambiaBase ecambiaAltezza

L’uso di questi metodi consente di costruire oggetti inconsistenti

Quadrato q = new Quadrato(4);q.cambiaBase(3);double area = q.getArea(); //area = 12

Li ridefiniamo in modo che questo non avvenga

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 87 / 111

Page 134: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: getBase, getAltezza

public void cambiaBase(double x) {cambiaLato(x);

}

public void cambiaAltezza(double x) {cambiaLato(x);

}

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Problema

I metodi si richiamano tra loro all’infinito.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 89 / 111

Page 135: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: getBase, getAltezza

public void cambiaBase(double x) {cambiaLato(x);

}

public void cambiaAltezza(double x) {cambiaLato(x);

}

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Problema

I metodi si richiamano tra loro all’infinito.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 89 / 111

Page 136: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: getBase, getAltezza

public void cambiaBase(double x) {cambiaLato(x);

}

public void cambiaAltezza(double x) {cambiaLato(x);

}

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Problema

I metodi si richiamano tra loro all’infinito.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 89 / 111

Page 137: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: getBase, getAltezza

public void cambiaBase(double x) {cambiaLato(x);

}

public void cambiaAltezza(double x) {cambiaLato(x);

}

public void cambiaLato(double x) {cambiaBase(x);cambiaAltezza(x);

}

Problema

I metodi si richiamano tra loro all’infinito.

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 89 / 111

Page 138: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Quadrato: getBase, getAltezza

public void cambiaBase(double x) {cambiaLato(x);

}

public void cambiaAltezza(double x) {cambiaLato(x);

}

public void cambiaLato(double x) {super.cambiaBase(x);super.cambiaAltezza(x);

}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 91 / 111

Page 139: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

protected

Il suo significato e legato all’ereditarieta

All’interno di un package il modificatore protected e equivalente adamichevole

All’esterno del package i membri protected di una classe A sonovisibili solo:

nel corpo delle classi B che la estendono

da un riferimento che sia al piu del tipo di B

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 93 / 111

Page 140: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

protected

Il suo significato e legato all’ereditarieta

All’interno di un package il modificatore protected e equivalente adamichevole

All’esterno del package i membri protected di una classe A sonovisibili solo:

nel corpo delle classi B che la estendono

da un riferimento che sia al piu del tipo di B

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 93 / 111

Page 141: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

protected

Il suo significato e legato all’ereditarieta

All’interno di un package il modificatore protected e equivalente adamichevole

All’esterno del package i membri protected di una classe A sonovisibili solo:

nel corpo delle classi B che la estendono

da un riferimento che sia al piu del tipo di B

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 93 / 111

Page 142: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Sommario: Estensione delle classi

1 Ereditarieta e implementazione di sottoclassiCostruttori e gerarchia delle classisuperOverloading e overridingIl metodo equals

2 Variabili e adombramento

3 Classi astratte

4 Implementazione della classe Rettangolo

5 Il modificatore protected

6 Il modificatore final

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 94 / 111

Page 143: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final

Il modificatore final puo essere applicato alle variabili, ai metodi ealle classi

Ha significati differenti a seconda del contesto in cui compare

In generale stabilisce che cio che e associato all’identificatore cui eapplicato non puo essere modificato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 96 / 111

Page 144: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final

Il modificatore final puo essere applicato alle variabili, ai metodi ealle classi

Ha significati differenti a seconda del contesto in cui compare

In generale stabilisce che cio che e associato all’identificatore cui eapplicato non puo essere modificato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 96 / 111

Page 145: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final

Il modificatore final puo essere applicato alle variabili, ai metodi ealle classi

Ha significati differenti a seconda del contesto in cui compare

In generale stabilisce che cio che e associato all’identificatore cui eapplicato non puo essere modificato

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 96 / 111

Page 146: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final applicato a variabili

final puo essere applicato alle variabili:

campicampi staticivariabili localiparametri formali

Una variabile final e una variabile alla quale e possibile assegnare unvalore una sola volta

Nel codice che la utilizza il valore della variabile e quindi costante

Un tentativo di modificare la variabile dopo che le e stato assegnatoun valore da luogo a un errore in fase di compilazione

Convenzione: per le variabili final si utilizzano nomi in maiuscolo, inmodo da evidenziarne la peculiarita

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 98 / 111

Page 147: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final applicato a variabili

final puo essere applicato alle variabili:

campicampi staticivariabili localiparametri formali

Una variabile final e una variabile alla quale e possibile assegnare unvalore una sola volta

Nel codice che la utilizza il valore della variabile e quindi costante

Un tentativo di modificare la variabile dopo che le e stato assegnatoun valore da luogo a un errore in fase di compilazione

Convenzione: per le variabili final si utilizzano nomi in maiuscolo, inmodo da evidenziarne la peculiarita

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 98 / 111

Page 148: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final applicato a variabili

final puo essere applicato alle variabili:

campicampi staticivariabili localiparametri formali

Una variabile final e una variabile alla quale e possibile assegnare unvalore una sola volta

Nel codice che la utilizza il valore della variabile e quindi costante

Un tentativo di modificare la variabile dopo che le e stato assegnatoun valore da luogo a un errore in fase di compilazione

Convenzione: per le variabili final si utilizzano nomi in maiuscolo, inmodo da evidenziarne la peculiarita

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 98 / 111

Page 149: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final applicato a variabili

final puo essere applicato alle variabili:

campicampi staticivariabili localiparametri formali

Una variabile final e una variabile alla quale e possibile assegnare unvalore una sola volta

Nel codice che la utilizza il valore della variabile e quindi costante

Un tentativo di modificare la variabile dopo che le e stato assegnatoun valore da luogo a un errore in fase di compilazione

Convenzione: per le variabili final si utilizzano nomi in maiuscolo, inmodo da evidenziarne la peculiarita

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 98 / 111

Page 150: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final applicato a variabili

final puo essere applicato alle variabili:

campicampi staticivariabili localiparametri formali

Una variabile final e una variabile alla quale e possibile assegnare unvalore una sola volta

Nel codice che la utilizza il valore della variabile e quindi costante

Un tentativo di modificare la variabile dopo che le e stato assegnatoun valore da luogo a un errore in fase di compilazione

Convenzione: per le variabili final si utilizzano nomi in maiuscolo, inmodo da evidenziarne la peculiarita

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 98 / 111

Page 151: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: variabili locali

Si puo assegnare loro il valore in fase di dichiarazione o in unmomento successivo.

final int X;final int Y = 2;X = Y + 1;

Nel caso delle variabili riferimento cio che risulta immodificabile e ilriferimento non l’oggetto.

Non viene compilato

final String STRINGA = "pippo";STRINGA = STRINGA.toUpperCase();

Compilato

final Rettangolo RETTANGOLO = new Rettangolo(2,3);RETTANGOLO.cambiaBase(4);

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 100 / 111

Page 152: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: variabili locali

Si puo assegnare loro il valore in fase di dichiarazione o in unmomento successivo.

final int X;final int Y = 2;X = Y + 1;

Nel caso delle variabili riferimento cio che risulta immodificabile e ilriferimento non l’oggetto.

Non viene compilato

final String STRINGA = "pippo";STRINGA = STRINGA.toUpperCase();

Compilato

final Rettangolo RETTANGOLO = new Rettangolo(2,3);RETTANGOLO.cambiaBase(4);

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 100 / 111

Page 153: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: variabili locali

Si puo assegnare loro il valore in fase di dichiarazione o in unmomento successivo.

final int X;final int Y = 2;X = Y + 1;

Nel caso delle variabili riferimento cio che risulta immodificabile e ilriferimento non l’oggetto.

Non viene compilato

final String STRINGA = "pippo";STRINGA = STRINGA.toUpperCase();

Compilato

final Rettangolo RETTANGOLO = new Rettangolo(2,3);RETTANGOLO.cambiaBase(4);

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 100 / 111

Page 154: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: parametri formali

public void f(final int X) {...}

A X viene assegnato un valore al momento dell’invocazione del metodo

All’interno del codice del metodo X risulta immodificabile

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 102 / 111

Page 155: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: parametri formali

public void f(final int X) {...}

A X viene assegnato un valore al momento dell’invocazione del metodo

All’interno del codice del metodo X risulta immodificabile

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 102 / 111

Page 156: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: parametri formali

public void f(final int X) {...}

A X viene assegnato un valore al momento dell’invocazione del metodo

All’interno del codice del metodo X risulta immodificabile

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 102 / 111

Page 157: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: campi statici

Il valore puo essere assegnato solo in fase di definizione

Ai campi statici viene assegnato un valore all’atto della creazioneanche in mancanza di un’inizializzazione esplicita

class A {static final int MAX_OGGETTI = 10;

...}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 104 / 111

Page 158: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: campi statici

Il valore puo essere assegnato solo in fase di definizione

Ai campi statici viene assegnato un valore all’atto della creazioneanche in mancanza di un’inizializzazione esplicita

class A {static final int MAX_OGGETTI = 10;

...}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 104 / 111

Page 159: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: campi statici

Il valore puo essere assegnato solo in fase di definizione

Ai campi statici viene assegnato un valore all’atto della creazioneanche in mancanza di un’inizializzazione esplicita

class A {static final int MAX_OGGETTI = 10;

...}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 104 / 111

Page 160: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: campi

E possibile assegnare il valore in fase di definizione, oppure all’internodei costruttori

I campi final privi di una inizializzazione esplicita sono chiamatiblank-final

I blank-final devono essere obbligatoriamente inizializzati all’interno ditutti i costruttori della classe

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 106 / 111

Page 161: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: campi

E possibile assegnare il valore in fase di definizione, oppure all’internodei costruttori

I campi final privi di una inizializzazione esplicita sono chiamatiblank-final

I blank-final devono essere obbligatoriamente inizializzati all’interno ditutti i costruttori della classe

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 106 / 111

Page 162: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: campi

E possibile assegnare il valore in fase di definizione, oppure all’internodei costruttori

I campi final privi di una inizializzazione esplicita sono chiamatiblank-final

I blank-final devono essere obbligatoriamente inizializzati all’interno ditutti i costruttori della classe

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 106 / 111

Page 163: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

Esempio

public class A {final int C = 0;final int D;

public A() {D = 1;

}

public A(int x) {D = x;

}

public String toString() {return C + ", " + D;

}}

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 108 / 111

Page 164: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: metodi

Stabilisce che il metodo non puo essere ridefinito dalle estensioni dellaclasse

Meccanismo utilizzato per impedire alle sottoclassi di cambiarne ilsignificato

I metodi final assicurano anche una maggiore efficienza, perche lagaranzia che non possono essere ridefiniti consente al compilatore ditrattarli in modo diverso dagli altri metodi

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 109 / 111

Page 165: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: metodi

Stabilisce che il metodo non puo essere ridefinito dalle estensioni dellaclasse

Meccanismo utilizzato per impedire alle sottoclassi di cambiarne ilsignificato

I metodi final assicurano anche una maggiore efficienza, perche lagaranzia che non possono essere ridefiniti consente al compilatore ditrattarli in modo diverso dagli altri metodi

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 109 / 111

Page 166: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: metodi

Stabilisce che il metodo non puo essere ridefinito dalle estensioni dellaclasse

Meccanismo utilizzato per impedire alle sottoclassi di cambiarne ilsignificato

I metodi final assicurano anche una maggiore efficienza, perche lagaranzia che non possono essere ridefiniti consente al compilatore ditrattarli in modo diverso dagli altri metodi

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 109 / 111

Page 167: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: classi

Specifica che non possono essere estese

Utilizzato per questioni di sicurezza ed efficienza

Esempi di classi final di Java sono la classe String e le classiinvolucro

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 111 / 111

Page 168: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: classi

Specifica che non possono essere estese

Utilizzato per questioni di sicurezza ed efficienza

Esempi di classi final di Java sono la classe String e le classiinvolucro

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 111 / 111

Page 169: Estensione delle classi - Capitolo 8 · 2011. 3. 31. · Quadrato `e una sottoclasse di Rettangolo Rettangolo `e una superclasse di Quadrato c 2005 Pearson Education Italia Capitolo

final: classi

Specifica che non possono essere estese

Utilizzato per questioni di sicurezza ed efficienza

Esempi di classi final di Java sono la classe String e le classiinvolucro

c© 2005 Pearson Education Italia Capitolo 8 - Estensione delle classi 111 / 111