Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Problema con private

  1. #1

    Problema con private

    ho un altro problema.
    ci sbatto la testa da ore senza risultati.
    ancora nn sono riuscito a mettere in pratica i consigli sull'altra discussione .
    codice:
    package gestionepersone;
    
    public class Persone {
        private String nome;
        private String cognome;
        private String datanascita;
        private String cittanascita;
        private String email;
    
        public Persone(String nome, String cognome, String datanascita, String cittanascita, String email){
            this.nome=nome;
            this.cognome=cognome;
            this.datanascita=datanascita;
            this.cittanascita=cittanascita;
            this.email=email;
        }
    
        public String Stampa(){
            return nome+", "+cognome+", "+datanascita+", "+cittanascita+", "+email;
        }
    }
    ho creato una classe Studenti che estende questa sopra:
    codice:
    package gestionepersone;
    import java.io.*;
    import javax.swing.*;
    
    public class Studenti extends Persone{
        String matricola;
        String scuola;
    
        public Studenti(String nome, String cognome, String datanascita, String cittanascita, String email, String matricola, String scuola){
            super(nome, cognome, datanascita, cittanascita, email);
            this.scuola=scuola;
        }
    
        public String matricola(Studenti s){
            return s.nome.substring(0,1)+s.cognome.substring(0,1)+s.datanascita.substring(0,1)+s.cittanascita.substring(0,1)+s.email.substring(0,1);
        }
    
        public boolean salvaStudenti(){
            try{
                FileWriter info=new FileWriter("studenti.txt", true);
                PrintWriter out=new PrintWriter(info);
                out.println(super.Stampa());
                out.close();
                return true;
            }
            catch(IOException e){
                JOptionPane.showMessageDialog(null, e.getMessage());
                return false;
            }
        }
    }
    il mio problema è al metodo matricola(Studenti s):
    /media/MATTE/GestionePersone/src/gestionepersone/Studenti.java:15: nome has private access in gestionepersone.Persone
    return s.nome.substring(0,1)+s.cognome.substring(0,1)+s.d atanascita.substring(0,1)+s.cittanascita.substring (0,1)+s.email.substring(0,1);
    /media/MATTE/GestionePersone/src/gestionepersone/Studenti.java:15: cognome has private access in gestionepersone.Persone
    return s.nome.substring(0,1)+s.cognome.substring(0,1)+s.d atanascita.substring(0,1)+s.cittanascita.substring (0,1)+s.email.substring(0,1);
    /media/MATTE/GestionePersone/src/gestionepersone/Studenti.java:15: datanascita has private access in gestionepersone.Persone
    return s.nome.substring(0,1)+s.cognome.substring(0,1)+s.d atanascita.substring(0,1)+s.cittanascita.substring (0,1)+s.email.substring(0,1);
    /media/MATTE/GestionePersone/src/gestionepersone/Studenti.java:15: cittanascita has private access in gestionepersone.Persone
    return s.nome.substring(0,1)+s.cognome.substring(0,1)+s.d atanascita.substring(0,1)+s.cittanascita.substring (0,1)+s.email.substring(0,1);
    /media/MATTE/GestionePersone/src/gestionepersone/Studenti.java:15: email has private access in gestionepersone.Persone
    return s.nome.substring(0,1)+s.cognome.substring(0,1)+s.d atanascita.substring(0,1)+s.cittanascita.substring (0,1)+s.email.substring(0,1);
    5 errors

    so che potrei risolvere mettendole public, ma nn penso sia una soluzione ideale.
    come posso fare??

  2. #2
    le classi estese non possono accedere alle variabili private del padre. Quindi o fai metodi getter/setter pubblici, o le rendi protected

    e cmq non so la discussione prima, ma io i nomi delle classi le avrei messe al singolare
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Originariamente inviato da Santino83_02
    le classi estese non possono accedere alle variabili private del padre. Quindi o fai metodi getter/setter pubblici, o le rendi protected

    e cmq non so la discussione prima, ma io i nomi delle classi le avrei messe al singolare
    ovviamente la soluzione era banale e io ci ho perso un marea di tempo .
    messo anche le classi al singolare.
    grazie!!

  4. #4
    ritorno sulla discussione perchè ho un altro problema:
    codice:
    public class Movimenti {
    
        private int entrate;
        private int uscite;
        private String causale;
        private String data;
    
        public Movimenti(int entrate, int uscite, String causale, String data) {
            this.entrate = entrate;
            this.uscite = uscite;
            this.causale = causale;
            this.data = data;
        }
    
        public int getEntrate() {
            return entrate;
        }
    
        public int getUscite() {
            return uscite;
        }
    
        public String getCausale() {
            return causale;
        }
    
        public String getData() {
            return data;
        }
    
        public void setEntrate(int entrate) {
            this.entrate = entrate;
        }
    
        public void setUscite(int uscite) {
            this.uscite = uscite;
        }
    
        public void setCausale(String causale) {
            this.causale = causale;
        }
    
        public void setData(String data) {
            this.data = data;
        }
    codice:
    public class Salva {
    
        public boolean salva() {
            try {
                Connection conn = DriverManager.getConnection("jdbc:mysql://.....");
                Statement stmt = conn.createStatement();
                int g = stmt.executeUpdate("insert into movimenti (entrate,uscite,causale,data) values(" + Movimenti.entrate + "," + Movimenti.uscite + ",'" + Movimenti.causale + "','" + Movimenti.data + "')");
                return true;
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
                return false;
            }
        }
    }
    mi continua a dire che entrate, uscite, causale e data hanno accesso privato.
    ovviamente stanno nello stesso package.
    mi sono riguardato vari esempi fatti in precedenza e nn ho notato differenze.
    dove sbaglio?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da fermat
    mi continua a dire che entrate, uscite, causale e data hanno accesso privato.
    ovviamente stanno nello stesso package.
    mi sono riguardato vari esempi fatti in precedenza e nn ho notato differenze.
    dove sbaglio?
    E, infatti, hanno accesso privato. Sono dichiarate giustamente private... hai predisposto correttamente dei metodi getter/setter... ma non li hai usati: hai tentato di accedere direttamente alle variabili.

    Forse volevi fare così:

    codice:
    int g = stmt.executeUpdate("insert into movimenti (entrate,uscite,causale,data) values(" +
        Movimenti.getEntrate() + "," +
        Movimenti.getUscite() + ",'" +
        Movimenti.getCausale() + "','" +
        Movimenti.getData() + "')");
    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
    Originariamente inviato da LeleFT
    E, infatti, hanno accesso privato. Sono dichiarate giustamente private... hai predisposto correttamente dei metodi getter/setter... ma non li hai usati: hai tentato di accedere direttamente alle variabili.

    Forse volevi fare così:

    codice:
    int g = stmt.executeUpdate("insert into movimenti (entrate,uscite,causale,data) values(" +
        Movimenti.getEntrate() + "," +
        Movimenti.getUscite() + ",'" +
        Movimenti.getCausale() + "','" +
        Movimenti.getData() + "')");
    Ciao.
    Il che è ancora errato... non essendo quei metodi dichiarati static
    Al mio segnale... scatenate l'inferno!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da R@ve M@ster
    Il che è ancora errato... non essendo quei metodi dichiarati static
    Già... leggendo in fretta non me ne sono nemmeno accorto...


    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

  8. #8
    ma mettendo i metodi static devo mettere anche le varibili static sennò mi da errore.
    devo mettere anche i setter come statici?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    fermat era un errore di leleleft, in genere la prassi è

    dichiarare private i campi (o protected quando non si vuole dare visibilità all'esterno o all'esterno del package)

    dichiarare per ogni campo il relativo getter e setter, che non sarà statico a meno che non sia il campo statico (e ti consiglio di usare static con parsimonia e solo quando realmente necessario)

    l'accesso avviene tramite istanziazione, cioè prima fai

    codice:
    MyClass classe = new MyClass(); 
    
    classe.setValore(valoreDaSettare); 
    classe.getValore();

  10. #10
    ah ok!
    perfetto fatto 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 © 2025 vBulletin Solutions, Inc. All rights reserved.