Creazione di istanze dallo stesso oggetto SuperClass

3

Ho 3 sottoclassi (LowState, MediumState, HighState) che derivano dalla stessa superclasse (State).

All'interno della superclasse, State, ho dichiarato diverse variabili che devono essere accessibili e modificate dalle 3 sottoclassi.

È possibile creare un'istanza di questi 3 oggetti di sottoclasse dallo stesso oggetto superclasse in modo che possano tutti accedere alle variabili dallo stesso stesso oggetto ?

In alternativa, posso semplicemente dichiarare le variabili in ogni sottoclasse e quindi passare i dati tra gli oggetti. Tuttavia, sono preoccupato che questo metodo concatenamento possa sfuggire di mano.

    
posta M-R 20.05.2016 - 13:06
fonte

2 risposte

2

Within the superclass, State, I have declared several variables which need to be accessed and changed from the 3 subclasses.

Questo è ciò che il modificatore protetto è per;

"# Io e le mie sottoclassi ...".

Is it possible to instantiate these 3 subclass objects from the same "superclass object" so that they can all access the variables ...

Ottenuto dal modificatore protetto.

... from the SAME object?

Ora che suona come una cosa strana (e pericolosa) che vuoi fare.

Perché vorresti cambiare questi valori? Potresti entrare in tutti i tipi di problemi per gestire i cambiamenti delle diverse sottoclassi.

Se veramente vuoi farlo, allora il modificatore statico potrebbe vuoi che lo desideri, ma potrebbe anche venire con un mucchio di altri, "nuovi ed eccitanti" problemi da affrontare (specialmente nei test unitari / beffardi).

    
risposta data 20.05.2016 - 13:19
fonte
0

Is it possible to instantiate these 3 subclass objects from the same "superclass object" so that they can all access the variables from the SAME object?

No. Ma puoi creare un'istanza da un State con i suoi membri predefiniti a valori particolari e di conseguenza le tue sottoclassi avranno tutti gli stessi valori.

public class State {
   protected int stateValue = 1;
}

public class SubState extends State {
   // stateValue will be '1' here...
}

Se hai usato la 'composizione' piuttosto che l'ereditarietà, puoi istanziare gli oggetti ' che fanno riferimento allo stesso oggetto' Stato '. Tuttavia dovresti essere cauto nel condividere quell'oggetto tra più oggetti in sottoclassi, e questo non sembra molto sicuro o intuitivo.

Notando il tuo commento di seguito, composizione fornirebbe i mezzi per condividere il cambiamento di stato, ad es.

public class SubState(State state) {
   // 'state' could be shared across multiple substates here...
}

e non hai bisogno della relazione superclasse / sottoclasse a cui ti stai riferendo.

    
risposta data 20.05.2016 - 13:14
fonte

Leggi altre domande sui tag