Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Probelmi con modificatore private ed ereditarietà
Forum - Java - Probelmi con modificatore private ed ereditarietà

Avatar
f.l.c.r (Normal User)
Rookie


Messaggi: 29
Iscritto: 05/01/2011

Segnala al moderatore
Postato alle 16:16
Giovedì, 13/01/2011
Salve,

ho le seguenti classi:

Codice sorgente - presumibilmente Java

  1. public class Persona {
  2.        
  3.         private String nome;
  4.        
  5.        
  6.         // Tutte queste sono proprietà comuni ad un oggetto di tipo persona
  7.         public Persona(){
  8.                 nome =null;
  9.         }
  10.        
  11.         public Persona(String nuovoNome){
  12.                 nome = nuovoNome;
  13.         }
  14.        
  15.         public void setNome(String nuovoNome){
  16.                 nome = nuovoNome;
  17.         }
  18.        
  19.         public String getNome(){
  20.                 return nome;
  21.         }
  22.        
  23.         public void temp(){
  24.                 scriviOutput();
  25.         }
  26.        
  27.         protected void scriviOutput(){
  28.                 System.out.println("Nome: " + nome);
  29.         }
  30.        
  31.         public boolean similEquals(Persona altraPersona){
  32.                 return this.nome.trim().equalsIgnoreCase(altraPersona.nome.trim());
  33.         }
  34.        
  35. }



Codice sorgente - presumibilmente Java

  1. public class Studente extends Persona {
  2.        
  3.         protected int matricola;
  4.        
  5.         public Studente(){
  6.                 super();
  7.                 matricola =0;
  8.         }
  9.        
  10.         public Studente(String nomeIniziale, int matricola){
  11.                 super(nomeIniziale);
  12.                 this.matricola = matricola;
  13.         }
  14.        
  15.         public void reimposta(String nuovoNome, int nuovaMatricola){
  16.                 setNome(nuovoNome);
  17.                 matricola = nuovaMatricola;
  18.         }
  19.        
  20.         public int getMatricola(){
  21.                 return matricola;
  22.         }
  23.        
  24.         public void setMatricola(int nuovaMatricola){
  25.                 matricola = nuovaMatricola;
  26.         }
  27.        
  28.         public boolean equals(Studente altroStudente){
  29.                 return this.similEquals(altroStudente) && this.matricola == altroStudente.getMatricola();
  30.         }
  31. }



Codice sorgente - presumibilmente Java

  1. public class Main {
  2.  
  3.  
  4.         public static void main(String[] args) {
  5.                
  6.                 Persona pers = new Persona();
  7.                
  8.                 pers.setNome("Filippo");
  9.                 System.out.println(pers.getNome());
  10.                 System.out.println();
  11.                 System.out.println("Metodo scrivioutput");
  12.                 pers.scriviOutput();
  13.                
  14.                 Persona altraPersona = new Persona();
  15.                 altraPersona.setNome("Filippo");
  16.                 System.out.println(pers.similEquals(altraPersona));
  17.                
  18.                 Persona stude = new Studente();
  19.                
  20.                 System.out.println(stude.getNome());
  21.                
  22.                 Studente nuovo = new Studente();
  23.        
  24.                
  25.                 nuovo.setMatricola(5);
  26.                 System.out.println(nuovo.getMatricola());
  27.                 nuovo.scriviOutput();
  28.                
  29.                 //nuovo = altraPersona;
  30.        
  31.                 altraPersona = nuovo;
  32.        
  33.                 altraPersona.scriviOutput();
  34.                
  35.                 nuovo.scriviOutput();
  36.                
  37.                 nuovo.matricola = 5;
  38.         }



Il modificatore di accesso private dovrebbe garantire visibilità nelle Classe stessa in cui è definito e nelle sottoclassi di quella classe.

Come mai allora nel metodo main l'istruzione

Codice sorgente - presumibilmente Plain Text

  1. nuovo.matricola = 5;



viene compilata?

Non dovrebbe vietarne l'accesso essendo di tipo pretected? :_doubt:

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
0
Down
V
Segnala al moderatore
Postato alle 23:53
Giovedì, 13/01/2011
Main, Persona e Studente sono nello stesso package?

http://download.oracle.com/javase/tutorial/java/javaOO/acc ...

Ad ogni modo, visto che hai costruito dei getters e setters, non ha nessun senso dichiarare matricola protected, dovrebbe essere private.


Il mio blog: https://piero.dev
PM