Ciao a tutti,
ho qualche dubbio su come utilizzar le classi astratte e l interfacce.....mi spiego.....
non riesco ad utilizzare
classe abstract
classe derivata on implementazione interfaccia
in allegato spiego meglio tutto
grazie
bb
Ciao a tutti,
ho qualche dubbio su come utilizzar le classi astratte e l interfacce.....mi spiego.....
non riesco ad utilizzare
classe abstract
classe derivata on implementazione interfaccia
in allegato spiego meglio tutto
grazie
bb
ci sono un po' di imprecisioni:
la classe "concreta" può lavorare con tutta la roba (membri, metodi) della superclasse e con roba (membri, metodi) dichiarati dalla classe (ad uso e consumo interno magari).
All'esterno dipende dal tipo, se vuoi usare qualcosa di tipico della concreta, devi castare l'oggetto alla concreta.
Molto spesso (almeno io le uso in questo modo) definisco metodi astratti (o una gerarchia astratta) quando c'è una base molto comune, ho tanti metodi che servono a tutte le derivate (li racchiudo nella superclasse) e nella derivata restano solo ed esclusivamente le eccezioni. Come tipo dichiaro sempre la superclasse, avrò una factory o un punto in cui istanzio correttamente.
Le interfacce servono a dichiarare gli intenti della classe, ma in realtà i metodi che usi all'esterno dipende molto dal tipo di oggetto che hai, se tu tieni l'oggetto come tipo interfaccia usi solo quelli dell'interfaccia ecc ecc.
E' un po' complesso, lo so
RTFM Read That F*** Manual!!!
Le classi abstract non possono istanziare oggetti in primis, ma vanno specializzatate in classi concrete che potranno istanziare oggetti. Una classe può estendere solo una superclasse a differenza del C. La sottoclasse eredita campi e metodi della superclasse e ne può aggiungere di nuovi. Qua ti consiglio di studiare Overriding e Overloading.
Le interfacce invece sono uno strumento che java mette a disposizione per consentire a più classi di fornire ed implementare un insieme di metodi comuni. In java 7 le interfacce contenevano soltanto metodi astratti, adesso da Java 8 possono essere implementati. Ed implementare un'interfaccia equivale a firmare un contratto che stabilisce di implementare tutti i suoi metodi.
Se ho sbagliato qualcosa correggetemi
PS: una classe può implementare tutte le interfacce che desidera.
cedo che la cos inizi ad essere chiara.
in pratica nel main devo sempre istanziare la classe concreta (quella derivata abstract, magari facendo un downcast.
cosa intendi che come tipo dichiari sempre la superclasse?
bb
Dichiarando il tipo della super classe (o dell'interfaccia)
puoi fare una cosa del genere:codice:public void foo(List<String> list) { ... }
codice:List<String> list1 = new ArrayList<String>(); foo(list1);In questo modo sleghi il tuo codice dall'implementazione specifica di una certa classe: fintanto che il contratto di List (in questo caso) è rispettato tu puoi passargli un List qualsiasi.codice:List<String> list2 = new LinkedList<String>(); foo(list2);
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI