• Non ci sono risultati.

Ereditarietà ed interfacce in Java

N/A
N/A
Protected

Academic year: 2021

Condividi "Ereditarietà ed interfacce in Java"

Copied!
18
0
0

Testo completo

(1)

Ereditarietà ed interfacce in Java

Paolo Bison

Fondamenti di Informatica 1 A.A. 2004/05

Universit`a di Padova

(2)

Ereditarietà



definizione di una classe (sottoclasse) come estensione di un altra classe (superclasse)



gerarchia di classi (albero/grafo di ereditarietà)



una sottoclasse può:



definire nuove variabili e/o metodi



ridefinire variabili e/o metodi presenti nelle superclassi

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.2/18

(3)

Ereditarietà in Java



singola

albero di ereditarietà +



interfacce

emulazione ereditarietà multipla

(4)

Sottoclasse



clausola opzionale extends in dichiarazione di classe class <classId> [extends <classId> ]



Es.: class Complex extends Number { ...}



classe Object

superclasse di default se non c’è clausola extends class Number { ...}

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.4/18

(5)

Associazione degli identificatori



associazione tra un identificatore e la sua dichiarazione



dato un identificatore si vede se è dichiarato nella classe



se non è lì dichiarato, si guarda nella superclasse



se non è dichiarato nella superclasse, si guarda nella superclasse della superclasse



altrimenti nella superclasse della superclasse della superclasse e così via ...



si risale la gerarchia di ereditarietà finchè non si trova

la dichiarazione o si segnala errore.

(6)

Ridefinizione di metodi



dato un metodo nella superclasse vi sono due possibilità:



“overloading”

definirlo con una differente “signature” (stesso nome, ma parametri differenti)



“overriding”

definirlo con la stessa “signature” (stesso nome e stessi parametri)

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.6/18

(7)

Ridefinizione di variabili



ridichiarare una variabile nasconde la definizione data nella superclasse



la variabile della superclasse non è accessibile

direttamente nella sottoclasse

(8)

Pseudo variabile super



riferimento all’oggetto corrente come istanza della superclasse



utilizzabile solamente nei metodi non-statici



meccanismo per accedere ad elementi della superclasse:



super.

metodo

attiva il

metodo

presente nella superclasse



super.

var

accede alla variabile

var

presente nella superclasse

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.8/18

(9)

Costruttori



attivazione esplicita di un costruttore della superclasse con il costrutto:

super([<parametri>])



deve essere la prima istruzione del costruttore



se non è presente il sistema invoca implicitamente super()



attivazione esplicita di un costruttore della stessa classe con il costrutto:

this([<parametri>])

(10)

Conversione di tipo



implicita

da una classe ad una qualunque delle sue superclassi Complex c; Number n; Object o;

n=c; o=c;



esplicita

da una classe ad una delle sue sottoclassi se e solo se l’oggetto è istanza della sottoclasse

c=(Complex)n;

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.10/18

(11)

Opzione final



elementi dichiarati final hanno le seguenti proprietà:



classe

non può essere estesa



metodo

non può essere “overriden”



variabile

non si può modificare il valore (costanti)

(12)

Classi astratte



classi che non possono avere istanze



descrivono parti condivise tra più classi



opzione abstract in intestazione della classe

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.12/18

(13)

Interfaccia



definizione di un tipo



sintassi

interface <Id>

[extends <interfaceIdList> ] {

<constantDefs>

<methodDefs>

}



consiste di costanti e metodi astratti



non vi è l’implementazione dei metodi che è demandata alle classi

grafo di ereditarietà delle interfacce

(14)

Interfaccia IntForwardList



definisce i metodi per accedere in avanti ad una lista di interi

interface IntForwardList {

int first();

int next();

boolean endOfList();

}

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.14/18

(15)

Interfaccia IntBackwardList



definisce i metodi per accedere all’indietro ad una lista di interi

interface IntBackwardList {

int last();

int previous();

boolean beginOfList();

}

(16)

Interfaccia IntBackforthList



definisce i metodi per accedere in entrambe le direzioni ad una lista di interi



composizione di funzionalità

interface IntBackforthList

extends IntForwardList,IntBackwardList {

}

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.16/18

(17)

Implementazione



classe definisce quali interfacce implementa



clausola implements in intestazione di classe

class <classId> [extends <classId> ] [implements <interfaceIdList> ] { ...}



la classe deve implementare tutti i metodi definiti nelle interfacce presenti in <interfaceIdList>



tipo polimorfico

istanze appartengono sia al tipo <classId> che ai tipi

definiti dalle interfacce

(18)

Conflitto tra identificatori



medesimo identificatore di metodo utilizzato in più di una interfaccia



differente “signature”

si implementano tutti i metodi corrispondenti



stessa “signature”

si implementa un solo metodo se hanno tutti il medesimo “return type” altrimenti interfacce incompatibili

Ereditariet`a ed interfacce in Java, Paolo Bison, A.A. 2004-05, 2004-11-13 – p.18/18

Riferimenti

Documenti correlati

 la classe deve implementare tutti i metodi definiti nelle interfacce presenti in &lt;interfaceIdList&gt;. 

Il processo di trovare tutti i pixel che nel frame buffer appartengono alla primitiva è detto

™ un puntatore ad una variabile const può essere assegnato solo ad un puntatore che è dichiarato const const char *bptr = mybuf;// Pointer to constant data // non posso cambiare

// print the value of the integer before changing it cout &lt;&lt; myInteger &lt;&lt; endl;. // dereference pointer and add 5 to the integer it

™Il processo di trovare tutti i pixel che nel frame buffer appartengono alla primitiva è detto

Il primo campo di testo serve per immettere una linea di testo; le due checkbox specificano se nel secondo campo di testo vengono riportati le lettere e/o i numeri

Facoltativo 1: aggiungere la possibilità di fare una ricerca; un campo di testo per inserire il testo da cercare, un bottone per far partire la ricerca, e un campo di

Switch - Uno switch è un sistema che lavora a livello ISO 2, simile ad un hub ma è dotato di intelligenza per ottimizzare la comunicazione sulla rete: memorizza in una