PDA

Visualizza la versione completa : [java] visibilità di private ereditate


speriamobene
29-06-2005, 02:32
ciao a tutti.

ho una classe Generale e due classi Particolare1 e Particolare2, che extend(s)ono la prima.

In Generale definisco "private var;", analoga cosa in Particolare1 e Particolare2.

Siccome Generale ha metodi 'comuni' mentre eseguo Particolare1 eseguo un metodo di Generale che aggiorna this.var=<valore>.

Noto che non viene aggiornata var di Particolare1 o Particolare2 ma quella di Generale...

ed infatti quando 'ritorno' in Particolare1 non mi ritrovo il valore aggiornato.

Come dire al programma che deve aggiornare quella di ParticolareN e non di Generale?

Matteo982
29-06-2005, 09:42
per metodi comuni intendi i metodi che vengono ereditati? Se non ti serve creare istanze della classe generale puoi provare a dichiararla astratta così penso non si aggiornino le variabili di Generale... :master:

floyd
29-06-2005, 10:12
una proprietà privata la gestisci nella classe che la contiene
devi dichiararla protected solo in Generale
credo

LeleFT
29-06-2005, 10:15
Per far sì che venga modificata la variabile di Particolare1 devi sottoporre il metodo ad override: ovvero, devi ridefinire il metodo in modo che modifichi la tua variabile, altrimenti ciò che accade è che viene chiamato il metodo della classe Generale, la quale non ha nessuna visibilità sulle variabili di Particolare... di più: Generale non sa nemmeno che esiste una classe Particolare. :)

Vediamo come si sviluppa la cosa:


public class Generale {
private tipo var1;
...
public void metodo() { ... } // modifica var1
}

public class Particolare extends Generale {
...
public void metodo() {
super.metodo(); // Se devo modificare anche la classe madre
... // qui dirò di modificare var1 di Particolare
}
}

Ciao. :ciauz:

Matteo982
29-06-2005, 12:48
Beh quindi se non deve istanziare oggetti di tipo Generale non va bene fare Generale astratta? Tanto deve comunque ridefinire il metodo... :zizi:

LeleFT
29-06-2005, 12:53
Sì... è una possibilità. Dipende da lui, se ha bisogno di istanziare o meno oggetto di tipo Generale.


Ciao. :ciauz:

speriamobene
29-06-2005, 13:01
ora praticamente ho creato la classe astratta, i metodi di overriding li ho messi abstract anch'essi, tanto in Generale non ho necessità di utilizzarli.
quanto alle variabili le ho fatte protected in quanto tutti i metodi, sia di Generale ceh di Particolare, fanno riferimento sempre alle stesse.

L'unica cosa ora devo debuggare x capire la natura di un errore.
Vi terrò aggiornati ;)

Loading