Si consideri l'esempio seguente,metodo di classe Super e interfaccia metodo predefinito di risoluzione dei conflitti
public class Testing extends SupCls implements Intf {
public static void main(String[] args) {
new Testing().test();
}
}
class SupCls {
public void test() {
System.out.println("From SupCls");
}
}
interface Intf {
public default void test() {
System.out.println("From Intf");
}
}
Come si può vedere, non c'è alcuna connessione tra SupCls
classe ed Intf
interfaccia. Ma entrambi sono che definiscono un metodo comune.
E la classe Testing
si estende SupCls
e in esecuzione Intf
.
Così, quando chiamo test()
metodo su Testing
l'uscita è,
From SupCls
Che credo abbia senso, perché si estende da una classe deve avere la priorità maggiore di attuazione da un'interfaccia.
Tuttavia, l'eclissi segnala altrimenti, come mostrato nella schermata di acquisizione sottostante.
Credo fermamente che questo è un bug in Eclipse.
Ma prima di assumere, questo comportamento è definito & documentato nel JLS? O c'è qualcos'altro che definisce questo comportamento?
Modifica: la versione di Eclipse è Mars Release (4.5.0), se è importante.
Dovrebbe essere un bug in eclissi. I metodi predefiniti fanno parte di Java8 e questo scenario non avrebbe avuto senso per JDK 7 o versioni precedenti. –
Il comportamento predefinito di eclissi. Mostra il metodo dell'interfaccia invece del metodo super-classe. In Even below java 1.8 Mostra i metodi dell'interfaccia (anche se non è un metodo predefinito) –
Controlla la regola n. 1 riguardante il metodo predefinito [Posta da Brian Goetz] (http://mail.openjdk.java.net/pipermail/lambda-dev/ 2013-marzo/008435.html) –