Perché un'interfaccia in Java non può avere lo stato?

5

Ci deve essere una buona ragione per cui i progettisti Java non hanno permesso di definire alcuno stato nelle interfacce. Puoi per favore chiarire questo aspetto della decisione di progettazione?

    
posta Geek 26.01.2013 - 18:33
fonte

5 risposte

29

Un'interfaccia è un contratto che specifica ciò che il suo implementatore promette di essere in grado di fare. Non è necessario specificare lo stato perché lo stato è un dettaglio di implementazione e serve solo a limitare gli implementatori nel modo in cui questo contratto è soddisfatto. Se vuoi specificare lo stato potresti voler ripensare all'uso delle interfacce e guardare invece alle classi di base astratte.

    
risposta data 26.01.2013 - 19:11
fonte
6

Perché le interfacce intendono specificare un'astrazione .

Una buona astrazione dovrebbe essere il più semplice possibile, il che significa specificare il meno possibile sui dettagli di implementazione. Lo stato è un dettaglio di implementazione e come tale non dovrebbe essere incluso nella tua astrazione.

I designer Java hanno quindi preso una decisione piuttosto buona per evitare di includere lo stato nelle interfacce.

Alternative da considerare se ti senti mai come lo vuoi in un'interfaccia:

  • Utilizza composizione per collegare insieme oggetti che hanno dichiarato e implementato le interfacce desiderate.
  • Utilizza una classe base astratta (ma tieni presente che questo mescola interfaccia e implementazione e può metterti nei guai se non stai attento)

Un video interessante su questo argomento è " Semplice reso facile " di Rich Hickey. Il loro punto chiave è che se metti insieme le cose che dovrebbero essere tenute separate, si finisce in un casino .....

    
risposta data 27.01.2013 - 07:54
fonte
2

Un'interfaccia per sua natura è semplicemente una specifica di come dovrebbe apparire un oggetto, per la sua stessa definizione non ha uno stato, non è solo java la sua lingua.

    
risposta data 27.01.2013 - 00:01
fonte
1

Perché con stato sarebbe stata una classe astratta; e poiché è consentita l'ereditarietà multipla per le interfacce = > Java avrebbe supportato l'ereditarietà multipla completa = > problema dei diamanti .

    
risposta data 27.01.2013 - 11:53
fonte
1

Aggiungendo semplicemente - un'interfaccia, per definizione, non ha stato. Questa è la definizione di cosa sia un'interfaccia, e se avesse lo stato, non sarebbe più un'interfaccia.

Se è necessario utilizzare lo stato, un'interfaccia è lo strumento sbagliato per il lavoro che si desidera eseguire. Forse staresti meglio chiedendo un'altra domanda (e forse su SO stesso piuttosto che qui) che descrive esattamente quale sia il problema che stai incontrando che ti sta facendo fare questa domanda, e potresti trovare più aiuto nel trovare una soluzione.

    
risposta data 27.01.2013 - 17:49
fonte

Leggi altre domande sui tag