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?
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.
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:
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 .....
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.
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 .
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.
Leggi altre domande sui tag design java language-design