Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [java] visibilità di private ereditate

    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?

  2. #2
    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:
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  3. #3
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    una proprietà privata la gestisci nella classe che la contiene
    devi dichiararla protected solo in Generale
    credo

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    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:
    codice:
    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.
    "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

  5. #5
    Beh quindi se non deve istanziare oggetti di tipo Generale non va bene fare Generale astratta? Tanto deve comunque ridefinire il metodo...
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Sì... è una possibilità. Dipende da lui, se ha bisogno di istanziare o meno oggetto di tipo Generale.


    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

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

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 © 2026 vBulletin Solutions, Inc. All rights reserved.