2017 i g di bindingpages.di.unipi.it/.../slides/32lunedi8-5/lezione13.pdf · import java. io * ,...

15
1/15 Lezione13.pdf (#1) 2017-05-08 16:20:18 1/12 Java: Basilari di Gerarchie di Classi Sommario: 3-8 Maggio, 2017 Classi e Sottoclassi: Oggetti e Costruttori Sottoclassi: Interfacce, Ereditariet` a e Shadowing Overriding di metodi Binding dinamico dei metodi: Late Binding Overloading e Overriding: Cautele. prof. Marco Bellia, Dip. Informatica, Universit` a di Pisa Java: Basics della Programmazione in Piccolo

Upload: others

Post on 16-Aug-2020

45 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

1/15 Lezione13.pdf (#1)2017-05-08 16:20:18

1/12

Java: Basilari di Gerarchie di Classi

Sommario: 3-8 Maggio, 2017

Classi e Sottoclassi: Oggetti e Costruttori

Sottoclassi: Interfacce, Ereditarieta e Shadowing

Overriding di metodi

Binding dinamico dei metodi: Late Binding

Overloading e Overriding: Cautele.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 2: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

2/15 Lezione13.pdf (2/15)2017-05-08 16:20:18

2/12

Classi e Sottoclassi: Oggetti e Costruttori

Sottoclasse Estende la gerarchia delle classi del programma:

Estende campi e metodi della (super)classeEredita campi e metodi della superclasse

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 3: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

3/15 Lezione13.pdf (3/15)2017-05-08 16:20:18

3/4

Classi e Sottoclassi: Oggetti e Costruttori

Sottoclasse Estende la gerarchia delle classi del programma:

Estende campi e metodi della (super)classeEredita campi e metodi della superclasse

(a destra: vista delle classi)

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 4: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

4/15 Lezione13.pdf (4/15)2017-05-08 16:20:18

4/4

Classi e Sottoclassi: Oggetti e Costruttori

Sottoclasse Estende la gerarchia delle classi del programma:

Estende campi e metodi della (super)classeEredita campi e metodi della superclasse

(a destra: vista di un oggetto di tipo B)

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 5: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

5/15 Lezione13.pdf (5/15)2017-05-08 16:20:18

5/10

Classi e Sottoclassi: Oggetti e Costruttori

Sottoclasse Estende la gerarchia delle classi del programma:

(a destra: vista di uno stato)

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 6: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

6/15 Lezione13.pdf (6/15)2017-05-08 16:20:18

6/13

Ereditarieta: Shadowing

shadowing Una sottoclasse ridefinisce un field, e accede didefault ...

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 7: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

7/15 Lezione13.pdf (7/15)2017-05-08 16:20:18

7/13

Ereditarieta: Shadowing/2

shadowing Una sottoclasse ridefinisce un field, accede didefault ... Ma puo accedere a entrambi. In questo caso, lopuo fare in due modi diversi:

Applicabile perche il field e di classe.

Il secondo modo, accede al campo attraverso l’oggetto

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 8: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

8/15 Lezione13.pdf (8/15)2017-05-08 16:20:18

8/13

Ereditarieta: Shadowing/3

shadowing Una sottoclasse ridefinisce un field, accede didefault ... Ma puo accedere a entrambi, in due modi diversi:

Applicabile perche il field e di classe.

Il secondo modo, accede al campo attraverso l’oggetto

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 9: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

9/15 Lezione13.pdf (9/15)2017-05-08 16:20:18

9/13

Ereditarieta: Overriding

E l’analogo dello shadowing su metodi anziche campi.

Una sottoclasse ridefinisce un metodo della super, rispettando leseguenti 3 condizioni:

metodo di istanza (non si applica a costruttori

stesso nome, stessi tipi degli argomenti,

eventuale tipo del valore calcolato ed eventuali tipi delle eccezioni

sollevabili devono essere sotto-tipi del metodo della super.

Riuso di codice.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 10: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

10/15 Lezione13.pdf (10/15)2017-05-08 16:20:18

10/13

Ereditarieta: Overriding e Late Binding

Quale binding deve assegnare il compilatore all’identificatore "f"che compare nell’invocazione "aa.f()"?

Late Binding Il binding e stabilito dinamicamente, guardando:+ il tipo e↵ettivo dell’oggetto calcolato dall’espressione di invo-cazione, "aa" nel nostro caso.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 11: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

11/15 Lezione13.pdf (11/15)2017-05-08 16:20:18

11/13

Ereditarieta: Overriding e (Down) Cast

La variabile "aa" ha comunque, tipo A e l’espressione "aa.h()"non e (sempre) definita.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 12: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

12/15 Lezione13.pdf (12/15)2017-05-08 16:20:18

12/13

Ereditarieta: Overriding e (Down) Cast/2

(Down) Cast deve essere utilizzato: (T)E assicura che il tipoe↵ettivo del valore calcolato da E sia T.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 13: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

13/15 Lezione13.pdf (13/15)2017-05-08 16:20:18

13/13

Overloading vs. Overriding

Overloading Metodi statici e non, ereditati e non, che hannostesso nome ma sono, a coppie, di↵erenti:

per numero di argomenti, o per tipo di un argomento, oppurese uno e ereditato, ha tipo calcolato che non e supertipo deltipo calcolato dell’altro metodo

Metodi overloaded sono tutti visibili e applicabili:

In caso di invocazione di metodo overloaded, a compile time escelto quello tra gli applicabili piu prossimo al tipo atteso.

Cautela. Errori nella definizione di un metodo overridding,rendono il metodo della superclasse overloaded (invece cheoveridden) e applicabile invece di essere ”scavalcato” dalmetodo della sottoclasse.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 14: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

14/15 Lezione13.pdf (14/15)2017-05-08 16:20:18

2/20

Overloading

Overloading Metodi statici e non, ereditati e non, che hannostesso nome ma sono, a coppie, di↵erenti:

per numero di argomenti, o per tipo di un argomento, oppurese uno e ereditato, ha tipo calcolato che non e supertipo deltipo calcolato dell’altro metodo

In caso di invocazione di metodo overloaded, a compile time escelto quello tra gli applicabili piu prossimo al tipo atteso.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo

Page 15: 2017 i g di Bindingpages.di.unipi.it/.../Slides/32Lunedi8-5/Lezione13.pdf · import java. io * , import java. class static int a; void class extends A{ static int a; void class Main

15/15 Lezione13.pdf (15/15)2017-05-08 16:20:18

3/20

Overloading

Cautela. Errori nella definizione, possono rendere overloadedun metodo che nelle intenzioni deve essere overridden.

prof. Marco Bellia, Dip. Informatica, Universita di Pisa Java: Basics della Programmazione in Piccolo