Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    254

    [JAVA] Interfacce ed abstract

    Salve,
    mi sto affaciando al mondo java, e dopo avere scoperto diverse
    sue potenzialità, sono caduto in una forte confusione.

    Fatto salvo di avere capito cosa sia ed a cosa serva una classe
    abstract, non riesco a capire a cosa serva una interfaccia.

    A dire il vero non riesco a capire cosa faccia di differente dalla
    abstract, se non solo definire le firme dei metodi, cosa che fa già
    l'abstract.

    In poche parole, quando in un progetto decido di usare una
    interfaccia e quando un abstract?!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    55
    Dovrebbe essere qualcosa del genere:

    In Java non è contemplata l'ereditarietà multipla, per cui per poter far in modo che una classe abbia le caratteristiche di + classi padri si utilizzano le interfacce.
    Le classi abstract si usano per "forzare" chi utilizzerà queste classi a rispettare la struttura imposta dalla classe astratta.

    Spero di essere stato chiaro e non averti detto troppe cavolate

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    254
    Ho capito.

    Grazie

  4. #4
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Credo la differenza sia anche concettuale:

    -se si espande una classe astratta X la classe figlia Y E' una classe X,il fatto che X sia astratta implica solo che la classe figlia essendo appunto della stessa "famiglia" deve comportarsi allo stesso modo della madre.

    -Se una classe implementa una interfaccia significa che la classe USA questa interfaccia, ovvero assicura che tutte le classi che implementano un'interfaccia possono rispondere a delle chiamate di metodo che l'interfaccia mette a disposizione.

    Quindi mentre due classi che non c'entrano nulla tra loro possono implementare la stessa interfaccia, se due classi espandono la setessa classe significa che fanno parte della stessa famiglia.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da Xadoom
    Credo la differenza sia anche concettuale:

    -se si espande una classe astratta X la classe figlia Y E' una classe X,il fatto che X sia astratta implica solo che la classe figlia essendo appunto della stessa "famiglia" deve comportarsi allo stesso modo della madre.

    -Se una classe implementa una interfaccia significa che la classe USA questa interfaccia, ovvero assicura che tutte le classi che implementano un'interfaccia possono rispondere a delle chiamate di metodo che l'interfaccia mette a disposizione.

    Quindi mentre due classi che non c'entrano nulla tra loro possono implementare la stessa interfaccia, se due classi espandono la setessa classe significa che fanno parte della stessa famiglia.
    Quello che dici è perfetto... solo che Java non distingue così fortemente tra interfaccia e classe madre.
    Una classe che implementa una inferfaccia diventa anche un'oggetto di quel tipo (proprio ciò che succede con l'ereditarietà multipla). E' per questo che, per esempio, nel metodo addWindowListener() io posso passare qualsiasi classe che implementi WindowListener (che sia un Frame o che sia una classe che deriva da Vector e che implementa WindowListener), anche se il metodo vuole un oggetto di tipo WindowListener (che è appunto un'interfaccia).

    Le interfaccie, quindi, sono viste da Java esattamente come classi.

    La differenza logica è esattamente quella che ha espresso Xadoom: se io voglio che due oggetti del tutto differenti possano essere passati ad un metodo, senza preoccuparmi di che tipo di oggetto siano, faccio implementare ad entrambi la stessa interfaccia e richiedo nel metodo che venga utilizzato un oggetto di tipo "interfaccia". All'interno del metodo, poi, non mi debbo preoccupare di quale tipo di oggetto sia stato passato, perchè so che comunuqe quell'oggetto possiede il/i metodo/i che a me servono per lavorarci su.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Esatto, io mi riferivo ad una differenza più di logica che altro.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2001
    Messaggi
    254
    Vi ringrazio delle definizioni che mi avete forni, sicuramente
    ora ho un po' + chiaro il tutto.

    Grazie.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.