2013-10-29 15 views
5

ho trovato che posso farlo in questo modo nella classe bambino:Cambiando il valore di variabili di istanza della superclasse da una sottoclasse

ParentClass.variable = value; 

Ma mi è stato detto che è meglio la pratica da usare ottenere/impostare i metodi e non dare accesso diretto alle variabili al di fuori di una classe. Anche se questo era per quando avevo un'istanza della classe in un'altra classe, non per sottoclassi e superclassi.

Quindi c'è un modo migliore per farlo e in che modo è generalmente considerata la migliore pratica?

+3

È consigliabile utilizzare i metodi get/set e non concedere l'accesso diretto a variabili esterne a una classe. – Ingo

+0

questo sembra pertinente: http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan

+0

Considera di creare un getter protetto sul genitore. – shmosel

risposta

2

Hai molte opzioni.

  1. super.field = x Bisogna avere accesso al campo per fare questo
  2. field = x Bisogna avere accesso al campo per fare questo. Non puoi inoltre avere un altro field nel figlio o solo i bambini verranno impostati.
  3. setParentField(x) Direi che questo è il secondo miglior modo per farlo.
  4. x = callChildMethod() questo codice può essere nel genitore. Il bambino ha l'implementazione che restituisce il risultato. Se questo è possibile, è il modo migliore per farlo. Vedere la template method pattern
0

Per le variabili di istanza è possibile effettuare le seguenti operazioni in un metodo di una sottoclasse:

this.variable = value; 

che è perfettamente bene. Per modificare istanze di altre classi è meglio usare getter e setter.

È vero che è necessario impedire alle altre classi di modificare direttamente le variabili di istanza; in tal caso è meglio usare getter e setter. Ma in una sottoclasse è possibile modificare direttamente le variabili di istanza.

-1

uno dei principi OOP è encapsulations avere codice delle migliori pratiche, e avendo Private Members/variabili, quindi accedervi utilizzando setter/getter è il modo per raggiungere incapsulamento.

0

È consigliabile utilizzare getter e setter. Più INFO.

è possibile utilizzare,

ParentClass.variable = value; 

Il miglior soltion dipende dal requisito.

0

Se nella superclasse vi sono membri privati, è possibile utilizzare il metodo setter e getter in quanto non è possibile utilizzare membri privati ​​nella relativa sottoclasse.

E in caso di qualsiasi membro di istanza statico che è possibile utilizzare direttamente con l'aiuto del nome classe. Se si tratta di un membro di istanza della super classe, provare ad accedere/modificare quel membro nella sottoclasse con l'uso della parola chiave super. È possibile modificare con l'aiuto di questa parola chiave anche se si ha un membro di istanza in superclasse e sottoclasse con lo stesso nome? Quindi in questo caso, con l'uso di , questa parola chiave JVM accede al membro di classe corrente membro i.e sottoclasse.

Problemi correlati