Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    aridaje

    Swing a stento so cos'è (è un package contenente classi utili per le interfacce grafiche no?)

    Capisco e non voglio criticarti, ci mancherebbe. Ma quello che si evince è che comunque hai "sorvolato" su un po' di cose relative al linguaggio Java.
    Non le ho sorvolate giuro! Ho seguito la guida indtorduttiva a java del sito nonché visionato i vari video di uninettuno sulla programamzione ad oggetti in java. Non sto dicendo ovviamente che questo basti, ma dire che non conosca cosa è l'ereditarietà, il polimorfismo e l'incapsulamento è esagerato.
    Poi sicuramente non sono un genio complice anche il basso livello di concentrazione e per capirle le cose me le devo leggere e rileggerle, senza contare che senza la pratica la teoria me la scordo dopo 1 ora.

    WindowAdapter è una classe che implementa WindowListener e dalla documentazione javadoc si evince pure che WindowAdapter è a sua volta una classe astratta.
    Appunto, è quello che ho detto. Ma ho anche fatto notare che le classi astratte sono classi che per definizione non vengono mai istanziate.
    Eppure tornando al pezzo di codice proposto ad inizio topic, a me pare proprio che venga istanziata:
    WindowListener wl;
    wl=new WindowAdapter()

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Mi intrometto un attimo: attenzione non scrivi mai
    codice:
    WindowAdapter wa = new WindowAdapter();
    perchè altrimenti ti da errore in compilazione.
    Scrivi invece:
    codice:
    WindowAdapter wa = new WindowAdapter(){
    //override dei vari eventi
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    è una "anonymous inner class".
    Ah! E da cosa lo capisco che è anonima?

    Ad esempio una'istanziazione del genere non è anonima, e qui ci siamo
    Impiegato rossi = new Impiegato ("Mario" , "Rossi" , 1974, "Capo reparto");
    Nel caso del codice new WindowAdapter() {
    // qui i metodi
    };è anonima perchè è seguita dalle parentesi graffe all'intenro delle quali viene effettuato l'override dei metodi della WA?

    Cmq faccio notare che il codice originale è WindowListener wa = new WindowAdapter()

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    ah ok, adesso tutto torna quindi. Se invece si fosse istanziata la classe senza le parentesi graffe etc etc, ci sarebbe stato appunto un errore per via della natra abstract della classe WA

    Ad ogni l'ultima domanda è: in questo caso si è istanziata una inner class anonima, è possibile istanziarne una non-anonima invece?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da American Visualizza il messaggio
    in questo caso si è istanziata una inner class anonima, è possibile istanziarne una non-anonima invece?
    Certo, basta che usi il costrutto classico: class Nome extends WindowAdapter { ..... }

    Ma tieni presente che, in generale, la gestione degli eventi è una cosa che in genere è meglio fare più vicino possibile (e magari, eventualmente, più nascosta all'esterno possibile) a dove crei e gestisci i componenti.
    Immagina di avere una tua classe MyFrame (estende es. JFrame) dove tieni in campi di istanza i vari riferimenti ai componenti e immagina di implementare un listener (es. ActionListener) in una classe esterna (un'altra classe top-level insomma). Cosa fai se nel listener devi accedere a vari di quei componenti? Dovresti passare al listener il riferimento a MyFrame (come minimo), dovresti magari disporre in MyFrame dei metodi pubblici per manipolare i componenti o (molto) peggio ... "aprire" con public l'accesso diretto ai campi dei componenti.
    Diventa una questione di "design" delle classi e così come ho appena descritto non è affatto buono.
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    ah ecco, quindi potrebbe eesere questa la differenza. Scritto nel secondo modo WA non è istanziato, bensì vengono solo overridati i metodi/eventi.
    E' così che va interpretato?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da American Visualizza il messaggio
    ah ecco, quindi potrebbe eesere questa la differenza. Scritto nel secondo modo WA non è istanziato, bensì vengono solo overridati i metodi/eventi.
    E' così che va interpretato?
    Quello che ti ha postato borras, cioè sostanzialmente:
    codice:
    WindowAdapter wa = new WindowAdapter() {
        // qui i metodi
    };
    è una "anonymous inner class". La classe istanziata non è infatti WindowAdapter ma è una classe "anonima" che in generale può solo:
    - estendere 1 classe.
    oppure (in alternativa, non insieme!)
    - implementare 1 interfaccia (estendendo implicitamente Object).

    Nel caso sopra, viene creata una classe "anonima" che estende WindowAdapter. La classe si dice anonima perché il vero nome della classe lo sceglie/compone il compilatore e tu il nome non lo sai/hai nel codice sorgente.

    P.S. è vero che il nome non lo sai (cioè non è evidente) ma si conosce quale è la convenzione usata dal compilatore.
    Ultima modifica di andbin; 16-10-2013 a 13:59
    Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    55
    Quote Originariamente inviata da American Visualizza il messaggio
    Scritto nel secondo modo WA non è istanziato
    Non ho capito cosa intendi, forse c'è qualcosa che non ci trova d'accordo con le terminologie
    Se scrivi
    codice:
    Oggetto og = new blablablabla;
    di fatto stai istanziando l'oggetto.
    I metodi di WA non sono definiti abstract altrimenti avremmo dovuto necessariamente implementarli al momento della
    codice:
    new WindowAdapter()
    .
    Riassumendo, se non fai override dei metodi allora vengono utilizzati i metodi della classe astratta WA (ripeto, i metodi non sono astratti) che "fanno niente".

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Quote Originariamente inviata da borras Visualizza il messaggio
    Non ho capito cosa intendi, forse c'è qualcosa che non ci trova d'accordo con le terminologie
    Niente me ne andavo per un'intuizione, che quindi si è rivelata sbagliata

    quindi sia se scrivo WindowAdapter wa = new WindowAdapter();


    che
    WindowAdapter wa = new WindowAdapter(){
    //override dei vari eventi
    }
    si tratta di un'istanzazione

    Quindi questo ci porta alla domanda, perchè -stando a quello che hai detto tu- il primo codice porta ad un errore di compilazione mentre il secondo no?

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da American Visualizza il messaggio
    Niente me ne andavo per un'intuizione, che quindi si è rivelata sbagliata

    quindi sia se scrivo WindowAdapter wa = new WindowAdapter();


    che
    WindowAdapter wa = new WindowAdapter(){
    //override dei vari eventi
    }
    si tratta di un'istanzazione

    Quindi questo ci porta alla domanda, perchè -stando a quello che hai detto tu- il primo codice porta ad un errore di compilazione mentre il secondo no?
    Te lo ha spiegato qui andbin...
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.