2015-09-01 13 views
6

Lo trovo strano e mi chiedevo se è qualcosa che viene regolarmente utilizzato. Quando può essere utile?Sovrascrittura del metodo di interfaccia predefinito con metodo astratto

public interface InterA { 
    Object getInfo() throws Exception1; 
} 
public interface InterB { 
    public default Integer getInfo(Object s) {return 67;} 
} 

public interface InterC extends InterA, InterB { 
    @Override public abstract Integer getInfo(Object s); 
} 
+1

Si può verificare se questo compila utilizzando javac ... –

+1

@LuiggiMendoza l'ho fatto, esso compila. È usato regolarmente, quando è utile? – Stanko

+0

Quindi la tua domanda non dovrebbe essere se questo è permesso. Stai chiedendo casi d'uso per usare questo disegno. Vi consiglio di modificare la domanda, altrimenti la risposta sarebbe: ** sì, è permesso. ** –

risposta

1

Naturalmente è consentito farlo. Il nome stesso dice che è abstract. Sei autorizzato a farlo quando la classe implementata di quella classe astratta deve sovrascrivere quel metodo.

Quando si decide di essere un abstract, non è necessario implementarlo.

+0

Quindi la classe che implementa InterC, diciamo InterD, deve dare un'implementazione del metodo? Diciamo allora che abbiamo un InterE che implementa l'InterD, che InterE può rendere nuovamente astratto il metodo? – Stanko

1

Questo esiste prima dei metodi di interfaccia predefiniti. Ad esempio, una classe astratta può fare

@Override 
    abstract public int hashCode(); 

costringendo sottoclassi per fornire implementazioni per hashCode, probabilmente a causa di altri requisiti imposti dalla classe astratta.

Problemi correlati