Quando sto cercando di compilare il seguente codicePerché il campo `statico privato 'non è consentito nell'interfaccia Java 8?
public interface SomeInterface{
private static Logger logger = Logger.getLogger();
public default void someMethod(){
logger.info("someMethod: default implementation");
}
}
ottengo un errore
Illegal modifier for the interface field SomeInterface.logger; only public, static & final are permitted
Quando elimino private
modificatore, il codice compila, ma non voglio che altre classi del pacchetto per vedere questo campo.
Perché Java non mi consente di fare una cosa del genere quando effettivamente ha senso?
E se si sostituisce il metodo someMethod? – Stultuske
@Stultuske Fornirò una nuova implementazione. Cosa succede se non lo sovrascrivo? – kamil09875
Logicamente parlando, le interfacce sono pensate per fornire un modo per generalizzare il comportamento di diverse classi differenti. Questo è ciò che l'utente deve fare per controllare il comportamento di quella classe. Prendi una macchina (nella vita reale) per esempio: hai una ruota, una radio, freni, frizione, ecc. Sai di quelli e impari come farli funzionare. Ma se l'interfaccia include qualcosa a cui non hai accesso, come utilizzerai questo per controllare il comportamento della classe? In altre parole, le interfacce sono la tua porta di accesso al mondo: usale per generalizzare non nascondere campi, ecc ... – Mackiavelli