Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Ereditarietà

Hybrid View

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

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

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

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

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

  6. #6
    Quote Originariamente inviata da andbin Visualizza il messaggio
    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).
    Allora ho le seguenti classi

    codice:
    public class Impiegato {
        
        private String nome,matricola;
        
        private double salario;
        
        private int annidiservizio;
        
        public int conta=0;
        
        public Impiegato(String n,double salario, String matricola,int anno){
            
            
            this.nome=n;
            this.salario=salario;
            this.matricola=matricola;
            this.annidiservizio=anno;
            
            
        }
        
        
        public int Contatore(){
            
            
            for(int i=0;i<10;i++){
                
                this.conta++;
                
                
                
            }
            
            return this.conta;
        }
        
        public void incrementasalario(double percent){
            
            this.salario*= 1+percent/100;
            
            
        }
        
        public void stampainfo(){
            
            System.out.println(nome+""+salario+""+matricola);
            
        }
        
        public String getNome(){
            
            return nome;
        }
        
        public int getannidiservizio(){
            
            
            return annidiservizio;
        }
        
        
        
        
        
        
        
        
        
        
        
    }
    codice:
    public class Manager extends Impiegato{
        
        
    private String nomeSegretaria;
    
    public Manager(String n, double salario, String Matricola, int anno){
        
        
    super(n ,salario,Matricola,anno);
    
    nomeSegretaria="";
    
    
    }
    
    public void incrementaSalario(double percentuale){
        
        
        
        double bonus=0.5*getannidiservizio();
    super.incrementasalario(percentuale + bonus);
        
        
    }
        
    
    public String getnomesegretaria(String nome){
        
        
        return nomeSegretaria=nome;
    }
        
    public void setNomesegretaria(String nome){
        
        this.nomeSegretaria=nome;
    }
    
    
    public int Contatore2(){
        
        int conta=Contatore();
        
        super.Contatore();
        
        return conta;
        
        
        
    }
    
    
    }

    codice del main

    codice:
    
    public class NewMain {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            
            
       String n;
       
       double salario;
       
       String matricola;
       
       int anno;
       
       int conta2;
       
       Scanner out=new Scanner(System.in);
            
       System.out.print("Inserisci n ");
       n=out.next();
       
       System.out.println("Inserisic salario");
       salario=out.nextDouble();
       
       System.out.print("Inserisci matricola");
       matricola=out.next();
       
       System.out.print("Inserisci anni di servizio");
       anno=out.nextInt();
            
       
    Impiegato imp=new Impiegato( n, salario,  matricola, anno);
    
    imp.Contatore();
    
    Manager conta=new Manager(n,salario,matricola,anno);
    
    
    conta2=conta.Contatore2();
    
    
    System.out.println("Contatore incrementato pari a "+conta2);
    
        }
        
    }

    Mentre nel mio codice interessato

    codice:
    while (rs.next()) {
    
    
    
    
                this.conta++;
                
            
            
              
              
              
    
             
    
    
    
               
        
            
              
              
            
                  
              
         
             
             
             
         
    
    
     
              
    
    
    
    
    
    
             
              
              
              
           
    
    }
    
    
    
    
    
             
    
    
    
    
    
        
        
        
              
              
    
             
         
    
    
    
          
          this.conta=this.contatorenumeropersone(this.conta);
          
    
                    System.out.println("Contatore persone view tabel"+this.conta);
    
    public int contatorenumeropersone(int conta){
               
               
               
               return this.conta;
               
               
           }
    fin quì tutto ok

    poi andando nel seguente codice

    codice:
    public int  contatoretotale(){
               
    
         int conta;
         
         conta=super.contatorenumeropersone(super.conta);
         
         
         super.contatorenumeropersone(super.conta);
    
         
    return super.conta;     
               
           }
    Ora il problema è il seguente:

    mentre nel primo programma tutto funziona correttamente in quanto non esiste nessuna variabile conta passata,
    nel secondo programma in quanto importo il super.conta mi restiutuisce il valore zero.

    Il fatto devo per forza importarla per avere il valore corretto.

    praticamente viene importato solo il valore che è stata assegnata nella dichiarazione per esempio protected int conta2=10; e viene ereditata senza problemi, mentre quanto incremento sorgono dei problemi nel passaggio della variabile conta conta=super.contatorenumeropersone(super.conta);

  7. #7
    Quote Originariamente inviata da signfra Visualizza il messaggio
    Allora ho le seguenti classi

    codice:
    public class Impiegato {
        
        private String nome,matricola;
        
        private double salario;
        
        private int annidiservizio;
        
        public int conta=0;
        
        public Impiegato(String n,double salario, String matricola,int anno){
            
            
            this.nome=n;
            this.salario=salario;
            this.matricola=matricola;
            this.annidiservizio=anno;
            
            
        }
        
        
        public int Contatore(){
            
            
            for(int i=0;i<10;i++){
                
                this.conta++;
                
                
                
            }
            
            return this.conta;
        }
        
        public void incrementasalario(double percent){
            
            this.salario*= 1+percent/100;
            
            
        }
        
        public void stampainfo(){
            
            System.out.println(nome+""+salario+""+matricola);
            
        }
        
        public String getNome(){
            
            return nome;
        }
        
        public int getannidiservizio(){
            
            
            return annidiservizio;
        }
        
        
        
        
        
        
        
        
        
        
        
    }
    codice:
    public class Manager extends Impiegato{
        
        
    private String nomeSegretaria;
    
    public Manager(String n, double salario, String Matricola, int anno){
        
        
    super(n ,salario,Matricola,anno);
    
    nomeSegretaria="";
    
    
    }
    
    public void incrementaSalario(double percentuale){
        
        
        
        double bonus=0.5*getannidiservizio();
    super.incrementasalario(percentuale + bonus);
        
        
    }
        
    
    public String getnomesegretaria(String nome){
        
        
        return nomeSegretaria=nome;
    }
        
    public void setNomesegretaria(String nome){
        
        this.nomeSegretaria=nome;
    }
    
    
    public int Contatore2(){
        
        int conta=Contatore();
        
        super.Contatore();
        
        return conta;
        
        
        
    }
    
    
    }

    codice del main

    codice:
    
    public class NewMain {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            
            
       String n;
       
       double salario;
       
       String matricola;
       
       int anno;
       
       int conta2;
       
       Scanner out=new Scanner(System.in);
            
       System.out.print("Inserisci n ");
       n=out.next();
       
       System.out.println("Inserisic salario");
       salario=out.nextDouble();
       
       System.out.print("Inserisci matricola");
       matricola=out.next();
       
       System.out.print("Inserisci anni di servizio");
       anno=out.nextInt();
            
       
    Impiegato imp=new Impiegato( n, salario,  matricola, anno);
    
    imp.Contatore();
    
    Manager conta=new Manager(n,salario,matricola,anno);
    
    
    conta2=conta.Contatore2();
    
    
    System.out.println("Contatore incrementato pari a "+conta2);
    
        }
        
    }

    Mentre nel mio codice interessato

    codice:
    while (rs.next()) {
    
    
    
    
                this.conta++;
                
            
            
              
              
              
    
             
    
    
    
               
        
            
              
              
            
                  
              
         
             
             
             
         
    
    
     
              
    
    
    
    
    
    
             
              
              
              
           
    
    }
    
    
    
    
    
             
    
    
    
    
    
        
        
        
              
              
    
             
         
    
    
    
          
          this.conta=this.contatorenumeropersone(this.conta);
          
    
                    System.out.println("Contatore persone view tabel"+this.conta);
    
    public int contatorenumeropersone(int conta){
               
               
               
               return this.conta;
               
               
           }
    fin quì tutto ok

    poi andando nel seguente codice

    codice:
    public int  contatoretotale(){
               
    
         int conta;
         
         conta=super.contatorenumeropersone(super.conta);
         
         
         super.contatorenumeropersone(super.conta);
    
         
    return super.conta;     
               
           }
    Ora il problema è il seguente:

    mentre nel primo programma tutto funziona correttamente in quanto non esiste nessuna variabile conta passata,
    nel secondo programma in quanto importo il super.conta mi restiutuisce il valore zero.

    Il fatto devo per forza importarla per avere il valore corretto.

    praticamente viene importato solo il valore che è stata assegnata nella dichiarazione per esempio protected int conta2=10; e viene ereditata senza problemi, mentre quanto incremento sorgono dei problemi nel passaggio della variabile conta conta=super.contatorenumeropersone(super.conta);

    Ragazzi ho risolto da solo.

    Ora praticamente ho notato che quando ad esempio inserisco un nome il contatore viene incrementato e passato ad un altra classe correttamente. ora il problema e che quando inserisco nuovamente un nome viene automaticamente reinizializzato il contatore=0.
    Come posso fare in modo che il contatore quando inserisco una persona parte dall'ultimo incremento?

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.