Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    55

    classi astratte ed interfaccia

    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
    File allegati File allegati

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    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!!!

  3. #3
    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.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2012
    Messaggi
    55
    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

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da blubossa Visualizza il messaggio
    cosa intendi che come tipo dichiari sempre la superclasse?
    Dichiarando il tipo della super classe (o dell'interfaccia)

    codice:
    public void foo(List<String> list) { ... }
    puoi fare una cosa del genere:

    codice:
    List<String> list1 = new ArrayList<String>();
    foo(list1);
    codice:
    List<String> list2 = new LinkedList<String>();
    foo(list2);
    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.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.