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

    [JAVA] - costruttore classe derivata

    Dato questo esempio, classe A e classe derivata D,compilando ed eseguendo l istruzione E e = new E() qualcuno gentilmente mi saprebbe spiegare perchè la stampa del metodo statico print non viene visualizzata?sembra quasi che il costruttore A() non venga mai richiamato..grazie

    class A{
    int i = 4;
    int j=0;
    A(){
    print("i = "+i+", j = "+j);
    j=7;
    }
    static int x1=print("static A.x1");
    static int print(String s){
    System.out.println(s);
    return 9;
    }
    }

    public class E {
    int k = A.print("non static E.k");
    E(){
    super();
    A.print("k = "+k);
    }
    static int x2 = A.print("static E.x2");
    public static void main(String[] args) {
    A.print("invocazione di E()");
    @SuppressWarnings("unused")
    E e = new E();
    }

    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: [JAVA] - costruttore classe derivata

    Originariamente inviato da gorso
    class A{
    int i = 4;
    int j=0;
    A(){
    print("i = "+i+", j = "+j);
    j=7;
    }
    static int x1=print("static A.x1");
    static int print(String s){
    System.out.println(s);
    return 9;
    }
    }

    public class E {
    int k = A.print("non static E.k");
    E(){
    super();
    A.print("k = "+k);
    }
    static int x2 = A.print("static E.x2");
    public static void main(String[] args) {
    A.print("invocazione di E()");
    @SuppressWarnings("unused")
    E e = new E();
    }

    }
    Metti il codice fra tag [CODE], senza indentazione è illeggibile.

    Originariamente inviato da gorso
    Dato questo esempio, classe A e classe derivata D,
    Veramente non c'è nessuna relazione d'ereditarietà fra le due classi (supponendo tu volessi scrivere E anziché D).

    Originariamente inviato da gorso
    compilando ed eseguendo l istruzione E e = new E() qualcuno gentilmente mi saprebbe spiegare perchè la stampa del metodo statico print non viene visualizzata?
    Il metodo static print() di A viene invocato ed eseguito (più volte fra l'altro), perché dici di no?

    Originariamente inviato da gorso
    sembra quasi che il costruttore A() non venga mai richiamato..grazie
    Infatti è così, non crei mai alcun oggetto A.

    Hai per caso dimenticato d'instaurare un rapporto d'ereditarietà fra le due classi A ed E?
    effeffe

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    4
    si scusate la dicitura corretta sarebbe "public class E extends A".cmq non ho capito la risposta.viene eseguito il costruttore di A() o no?io l ho compilato e non mi risulta nessuna stampa del metodo statico print .

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da gorso
    si scusate la dicitura corretta sarebbe "publi class E extends A".cmq non ho capito la risposta.viene eseguito il costruttore di A() o no?io l ho compilato e non mi risulta nessuna stampa del metodo statico print .
    Quel dettaglio non è trascurabile, senza quello il costruttore di A non viene invocato, con quella scrittura invece sì.

    Comunque anche senza "extends" un po' di stampe vengono eseguite lo stesso, se non è così stai sbagliando a compilare e/o ad eseguire il programma.
    effeffe

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    4
    riformulo la domanda..le stampe che ottengo sono :

    static A.x1
    static E.x2
    invocazione di E()
    non static E.k
    k = 9

    ma mi sarei aspettato una output di questo tipo:

    static A.x1
    static E.x2
    invocazione di E()
    i = 4, j = 0 <----------------------------
    non static E.k
    k = 9

    vorrei sapere perche la stampa di "i = 4, j = 0" non esce in output.
    ho provato ad aggiungere un "system.out.print("debug");" all interno del costruttore di A() ma non me lo scrive in output..quindi mi viene da pensare che non entro mai nel costruttore di A().
    se non mi sbaglio quando creo un oggetto derivato creo anche i campi dati della super classe quindi per farlo devo passare anche attraverso il costruttore della superclasse..
    spero di essermi spiegato.ringrazio nuovamente per le risposte repentine.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da gorso
    riformulo la domanda..le stampe che ottengo sono :

    static A.x1
    static E.x2
    invocazione di E()
    non static E.k
    k = 9

    ma mi sarei aspettato una output di questo tipo:

    static A.x1
    static E.x2
    invocazione di E()
    i = 4, j = 0 <----------------------------
    non static E.k
    k = 9

    vorrei sapere perche la stampa di "i = 4, j = 0" non esce in output.
    ho provato ad aggiungere un "system.out.print("debug");" all interno del costruttore di A() ma non me lo scrive in output..quindi mi viene da pensare che non entro mai nel costruttore di A().
    se non mi sbaglio quando creo un oggetto derivato creo anche i campi dati della super classe quindi per farlo devo passare anche attraverso il costruttore della superclasse..
    spero di essermi spiegato.ringrazio nuovamente per le risposte repentine.
    Hai aggiunto la parte mancante "extends A"? Hai ricompilato dopo averla aggiunta?
    A me, con quell'aggiunta, dà l'output atteso.
    effeffe

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    4
    colpa mia.avevo aggiunto la parte mancante ma compilava sempre sul vecchio.ho riaggiornato e adesso funziona.
    grazie di nuovo.
    la prossima volta starò più attento!!

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.