Quando utilizzare l'ereditarietà o la composizione / aggregazione?

3

In generale, come faccio a decidere se usare la classe make come classe super o renderla un membro di dati privato di un'altra classe? Ad esempio, date due classi, come si decide se farlo:

public class Sprite {
    private BaseImage image;
    ...

o questo:

public class Sprite extends BaseImage {
    ...

Funzionalmente, conosco la differenza: nel secondo caso, qualsiasi metodo che utilizza un'istanza della classe Sprite avrà accesso al comportamento BaseImage sottostante. Nel primo caso il comportamento dell'oggetto BaseImage è nascosto. Ma dal punto di vista del design, che è preferibile in quali casi?

    
posta Ataraxia 22.06.2013 - 15:40
fonte

2 risposte

1

Se comprendo correttamente la tua domanda (e non sono sicuro di farlo), stai riscontrando un problema simile rispetto a quello che avevo qualche settimana fa.

Chiediti se Sprite has a baseImage [istanza] o meglio is a baseImage [sottoclasse]

Ulteriori letture:

mia stessa domanda
Is-a
ha-un

Se ho qualcosa che non va, ignora questa risposta:)

    
risposta data 22.06.2013 - 16:33
fonte
3

In parole semplici:

Il primo esempio è un "ha una relazione" mentre il secondo è un "è una relazione" .

Non hai Car estendi Wheel . Car ha le ruote.

Car non ha un Vehicle , Car è un Vechicle .

L'ereditarietà è per "è una relazione" .

La composizione è per "ha una relazione" .

Non so se Sprite è un BaseImage o ha BaseImage . Questo è per te da decidere.

    
risposta data 22.06.2013 - 16:35
fonte

Leggi altre domande sui tag