vuoi
o PayPal
tutte le volte che vuoi
Classi astratte e interfacce
Classe astratta:
· È una classe implementata in modo parziale, contiene la
· dichiarazione di alcuni metodi (metodi astratti che
verranno implementanti dalla classi che estenderanno)
di cui viene specificata la signature ma non il corpo,
nella classe astratta alcune implementazioni possono
essere fornite, non è quindi un'astrazione pura.
Non può essere istanziata proprio perché definita in
· modo incompleto, può essere però estesa. Le classi che
estendono la classe astratta sono classi concrete e
possono essere istanziate
Le classi astratte sono progettate per essere estese da
· altre classi che forniscono delle opportune
implementazioni per i metodi astratti per sfruttare il
concetto di polimorfismo
Classi astratte servono principalmente a:
· Definire il comportamento comune per tutte le
· classi che estenderanno
Dichiarare -senza implementare- le funzionalità
· che devono essere implementate da tutte le classi
che estenderanno
La classe astratta si indica come:
· public abstract class Forma
Metodo astratto si indica come:
· public abstract double area(); //indico che ogni forma
deve saper calcolare la propria area, avendo un metodo
public double area();
Immaginiamo di avere forma astratta e quadrato
· concreta:
Quadrato q=new Quadrato(2, “bianco”);
Forma f=new Quadrato(10, “rosso”);
ora su quadrato posso chiamare tutti i metodi della
classe quadrato, invece su forma posso chiamare solo i
metodi che sono presenti nella classe astratta Forma, e
non quelli in Quadrato
Se una classe contiene almeno un metodo astratto, il
· compilatore insiste
che la classe deve essere dichiarata astratta.
Qualsiasi sottoclasse di classi astratte deve fornire
· un'implementazione di metodo astratto o dichiararsi
astratto.
Abstract è l’opposto di final, ad esempio una classe final
· non può avere sottoclassi, invece una classe astratta
deve avere una sottoclasse
Interfacce:
· Non viene data l’implementazione di nulla, è astrazione
· pura
Non introducono dipendenze tra classi che comunque
· non ne hanno ma comunque consentono di
rappresentare una sorta di collegamento logico
Permettono l’estensibilit poiché è possibile aggiungere
· moduli e collegarli agli altri mediante interfacce. E'
estendibile purchè sia chiaro qual è l'interfaccia di
collegmamento che definisce il contratto, il
comportamento minimale, che gli altri componenti
possono sfruttare
Nel momento in cui dichiariamo che implementiamo
· un'interfaccia il compilatore richiede che noi forniamo
l'implementazione di tutti i metoid definiti nell'interfacce
da cui ereditiamo.
L’interfaccia è scritta come:
· Interface Driveable{
}
Essendo puramente astratte non ha senso che abbiano
· degli attributi, a meno di casi particolari, cioè costanti,
essi devono essere:
Costanti
· Statiche
· pubbliche
·
Essa definisce univocamente quale sarà il
· comportamento minimale deglio oggetti che
erediteranno da essa
Le classi che ereditano da essa sono costrette a fornire
· l’implementazione dei metodi definiti dall’interfaccia
Una interfaccia non ha un costruttore
· Ha senso che i metodi siano solo pubblici. Non ci
· possono essere metodi statici. Essendo i metodi solo
pubblici non dichiariamo i modificatori di visibilità.
(forse?)
Tutto ciò che è nell’interfaccia è implicitamente astratto
· quindi non necessita della keyword abstract
L’interfaccia è una sorta di contratto, anche se ci metto
· un set minimo di metodi, esso è come un contratto che
dice che l’oggetto che estende l’interfacci avrò almeno
questi metodi, possiamo ad esempio diffonderlo dandolo
al nostro team etc…
Pregio rispetto alle classi astratte: In java si può
· estendere solo da un oggetto per volta, mediante le
interfacce si ha una sorta di ereditarietà multipla
ereditando da più interfacce, possiamo quindi estendere
una classe (astratta o concreta) e implementare quante
interfacce vogliamo. Due interfacce possono avere lo
stesso nome, non è un problema perché non ho
implementazione.
Esempio di classe che estende 2 interfacce:
class AvisCar implements Driveable, Rentable{