Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Ereditarietà

  1. #1

    Ereditarietà

    Salve,

    Allora ho creato una classe padre da cui crea due figli. Da cui il secondo figlio crea un figlio e di conseguenza diventa padre di questo figlio creato.

    Da cui a un figlio eredito una variabile conta e ad un altro figlio eredito la variabile conta2(che evidentemente creo una variabile int conta2*; conta2*=conta2;

    Ecco ora il secondo figlio ha un figlio che eredità la variabile conta2*.

    Ora il problema e che la variabile conta2* nel figlio viene incrementata pari a n volte poi quando eredito la variabile conta2* nel figlio mi restituisce il valore 0.

    Mentre se dichiaro un altra variabile nel figlio(dove è presente la variabile conta2*) e la eredito nel suo figlio creato il valore viene ereditato correttamente.

    Mentre con l'incremento e dopo il passaggio di variabile al figlio non parte.

    Ecco la parte di codice incriminata


    Codice del cosidetto padre


    codice:
    ResultSet  rs = stmt.executeQuery("SELECT * FROM NOMETAB;");
    
    while (rs.next()) {
    
    
    
    
    
    
             
    
    
    
    
    
        
        
        
              Nome2=rs.getString("Nome");
              Cognome2=rs.getString("Cognome");
    
              super.contanumeropersonevistabel++;
              
    this.conta2*=super.contanumeropersonevistabel;
      
              System.out.println("Contatore persone "+this.conta2*);
    
    
    }
    Codice del figlio

    codice:
     System.out.println("Contatore"+super.conta2*);
    E restituisce il valore 0 mentre come detto se dichiaro ad esempio una variabile int contagen=30; e la eredito nel figlio mi restituisce il valore 30 mentre per la variabile conta2* stranamente mi dà un valore 0.

    Come è possibile?
    Ultima modifica di deleted_2024.08.22; 20-04-2014 a 23:39

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da signfra Visualizza il messaggio
    Allora ho creato una classe padre da cui crea due figli. Da cui il secondo figlio crea un figlio e di conseguenza diventa padre di questo figlio creato.

    Da cui a un figlio eredito una variabile conta e ad un altro figlio eredito la variabile conta2(che evidentemente creo una variabile int conta2*; conta2*=conta2;

    Ecco ora il secondo figlio ha un figlio che eredità la variabile conta2*.

    Ora il problema e che la variabile conta2* nel figlio viene incrementata pari a n volte poi quando eredito la variabile conta2* nel figlio mi restituisce il valore 0.

    Mentre se dichiaro un altra variabile nel figlio(dove è presente la variabile conta2*) e la eredito nel suo figlio creato il valore viene ereditato correttamente.
    Scusa, non ti offendi vero se ti dico che così come l'hai spiegato non si capisce proprio nulla? Forse è meglio se posti del codice, almeno le parti di quelle classi di cui parli in cui si possa perlomeno vedere come è dichiarata la classe e che campi contiene.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Scusa, non ti offendi vero se ti dico che così come l'hai spiegato non si capisce proprio nulla? Forse è meglio se posti del codice, almeno le parti di quelle classi di cui parli in cui si possa perlomeno vedere come è dichiarata la classe e che campi contiene.
    allora, praticamente ho creato 4 classi.
    La prima classe(padre) crea 2 classi figlie da cui ciascun figlio eredita la variabile conta.
    ora il secondo figlio diventa padre in quanto crea un altro figlio.
    Il problema sta nel fatto che il figlio appena creato eredità la variabile conta del padre originario.
    se lo dichiarò normalmente con private int conta=10 viene ereditato correttamente. Mentre invece se lo incremento dentro un ciclo while questo quanto viene ereditato mi restituisce un valore pari a zero.

  4. #4
    Quote Originariamente inviata da signfra Visualizza il messaggio
    allora, praticamente ho creato 4 classi.
    La prima classe(padre) crea 2 classi figlie da cui ciascun figlio eredita la variabile conta.
    ora il secondo figlio diventa padre in quanto crea un altro figlio.
    Il problema sta nel fatto che il figlio appena creato eredità la variabile conta del padre originario.
    se lo dichiarò normalmente con private int conta=10 viene ereditato correttamente. Mentre invece se lo incremento dentro un ciclo while questo quanto viene ereditato mi restituisce un valore pari a zero.
    Codice del padre
    codice:
    public class Contatore {
        
        
        public  int contanumeropersonevistabel=0;
        
        public int contanueropersoneins=0;
    }
    Codice dei due figli

    1 figlio

    codice:
    public class insert_query extends Contatore {
       
        private String Nometab,Nome_,Cognome_;
        
        public int conta;
        
        
        Connection conn = null;
        Statement stmt = null;
        
       
          
    
    
    //   //
    
    //   //
    
    
    //   //
    
    
    //     //
    while (rs.next()) {
    
    
              super.contanumeropersonevistabel++;
              
    this.conta=super.contanumeropersonevistabel;
              
              
              
              
              System.out.println("Contatore persone incrementato"+this.conta);
    
    
    
              
    
    
    }

    2 figlio

    codice:
    public class insertn_persone extends Contatore {
       
        private String Nometab,Nome_,Cognome_;
        
        public int conta;
        
        
        Connection conn = null;
        Statement stmt = null;
        
       
          
      public void insertquerynpersone(String nometabella,String Nome, String Cognome){
          
          this.Nometab=nometabella;
          this.Nome_=Nome;
          this.Cognome_=Cognome;
          
      System.out.println(""+nometabella+Nome+Cognome);
          
          
          try{
              
           // codice esecuzione query//
          
          super.contanueropersoneins++;
          
          
          this.conta=super.contanueropersoneins;
          
          System.out.println("Contatore inserimento persona"+this.conta);
    
                
          
          
      
         
    
    
       
          
          
        
       }catch(SQLException se){
          //Handle errors for JDBC
          se.printStackTrace();
       }catch(Exception e){
          //Handle errors for Class.forName
          e.printStackTrace();
       }finally{
          //finally block used to close resources
          try{
             if(stmt!=null)
                stmt.close();
          }catch(SQLException se2){
          }// nothing we can do
          try{
             if(conn!=null)
                conn.close();
          }catch(SQLException se){
             se.printStackTrace();
          }//end finally try
       }//end try
       System.out.println("Goodbye!");  
        
      }
      
    }
    codice:
    public  class Personsearch extends insert_query    {
        
      
    Person pers;
        
    public String Nome;
    public String Cognome;
    public int contatotale;
     
    
    
    public Personsearch(String Nome,String Cognome) {
        
    
        System.out.println("Contatore"+super.conta);
        
    
        
    }
    Ecco il problema e che il contatore della classe insert_query non eredita il conta e mi porta un valore pari a zero. Mentre se nella classe insert_query se dichiaro normalmente un public int conta2=10; quando lo eredito nella classe Personsearch lo eredita e non so il motivo.
    Ultima modifica di LeleFT; 22-04-2014 a 09:58 Motivo: Aggiustati tag CODE

  5. #5
    per favore mi potete risolvere questo dubbio? dopo l'incremento non eredita il suo valore, come mai?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da signfra Visualizza il messaggio
    dopo l'incremento non eredita il suo valore, come mai?
    insert_query "eredita" le due variabili di istanza di Contatore e in più ha conta. Nel while del rs.next() incrementi contanumeropersonevistabel (nota: il super non serve ... li eredita!) e dopo ogni incremento assegni anche a conta.
    Finito il while, conta sarà per forza uguale all'ultimo valore che ha avuto contanumeropersonevistabel.
    No?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    insert_query "eredita" le due variabili di istanza di Contatore e in più ha conta. Nel while del rs.next() incrementi contanumeropersonevistabel (nota: il super non serve ... li eredita!) e dopo ogni incremento assegni anche a conta.
    Finito il while, conta sarà per forza uguale all'ultimo valore che ha avuto contanumeropersonevistabel.
    No?
    Allora praticamente nella classe insert_query all'interno del ciclo while(rs.next()); incremento solo

    codice:
    contanumeropersonevistabel++;
    e dopo ho fatto la prova nel seguente codice

    codice:
    public  class Personsearch extends insert_query    {
        
     Person pers;
        
    public String Nome;
    public String Cognome;
    public int contatotale;
     
    public Personsearch(String Nome,String Cognome) {
    
        
    this.Nome=Nome;
    this.Cognome=Cognome;
    
    
    System.out.println("Contatore"+contanumeropersonevistabel);
    
    }
    }
    E mi restituisce sempre il valore zero.

    Eppure ho solo incrementato senza il super dentro il ciclo while la variabile contanumeropersonevistabel che viene ereditata dalla classe Contatore.

    Come lo posso ereditare correttamente?
    Ultima modifica di deleted_2024.08.22; 22-04-2014 a 22:54

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da signfra Visualizza il messaggio
    Allora praticamente nella classe insert_query all'interno del ciclo while(rs.next()); incremento solo

    codice:
    contanumeropersonevistabel++;
    Dal codice che avevi postato si pensava/deduceva che

    super.contanumeropersonevistabel++;
    this.conta=super.contanumeropersonevistabel;

    erano insieme dentro il while .....


    Quote Originariamente inviata da signfra Visualizza il messaggio
    codice:
    public  class Personsearch extends insert_query    {
    
    // [...]
     
    public Personsearch(String Nome,String Cognome) {
    System.out.println("Contatore"+contanumeropersonevistabel);
    
    }
    }
    E mi restituisce sempre il valore zero.
    Qui stampi contanumeropersonevistabel nel costruttore .... i super-costruttori cosa fanno?
    Quel ciclo while in cui fai super.contanumeropersonevistabel++; è in uno dei super-costruttori? Direi di no (e non dovrebbe, infatti).

    Hai postato codice incompleto e che lascia adito a dubbi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Dal codice che avevi postato si pensava/deduceva che

    super.contanumeropersonevistabel++;
    this.conta=super.contanumeropersonevistabel;

    erano insieme dentro il while .....



    Qui stampi contanumeropersonevistabel nel costruttore .... i super-costruttori cosa fanno?
    Quel ciclo while in cui fai super.contanumeropersonevistabel++; è in uno dei super-costruttori? Direi di no (e non dovrebbe, infatti).

    Hai postato codice incompleto e che lascia adito a dubbi.
    allora praticamente voglio solo capire come ereditare il contatore nella classe person search senza valore nullo? Come posso fare? Grazie

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da signfra Visualizza il messaggio
    voglio solo capire come ereditare il contatore nella classe person search senza valore nullo?
    Ma ascolta .. il valore 0 che vedi è presumibilmente quello che è ancora di "default", iniziale, nel campo. Mi pare ovvio che se cerchi di stampare quel campo all'interno del costruttore di Personsearch (e nessun super-costruttore assegna qualcosa al campo) .... è 0. Che cosa ti aspetteresti di diverso? Il valore sei tu che devi assegnarlo facendo qualcosa nei metodi.

    Vorrei che cercassi di ragionare un momento ... Personsearch il campo contanumeropersonevistabel lo eredita da Contatore, punto. Il campo esiste materialmente in ogni istanza di Personsearch (questo indipendentemente dal livello di accesso). Poi il livello è tale per cui il campo è visibile non solo alle sottoclassi ma potenzialmente a qualunque classe (essendo public).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.