Comme je le montrerai, il est possible d'implémenter l'interface ci-dessus en utilisant un proxy. La question la plus significative est, pourquoi essaieriez-vous de faire une interface non implémentable? Même en tant que point philosophique, il semble plutôt superficiel.
import java.lang.reflect.Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
class NoFinal
{
public static void main(String[] a) throws Throwable
{
FinalInterface o = (FinalInterface) Proxy.newProxyInstance(FinalInterface.class.getClassLoader(), new Class[]{FinalInterface.class}, new InvocationHandler()
{
public Object invoke(Object proxy, Method method, Object[] args)
{
System.out.println(method);
return null;
}
});
Method[] methods = FinalInterface.class.getDeclaredMethods();
methods[0].invoke(o, new Object[]{null});
methods[1].invoke(o, new Object[]{null});
}
}
Cela ne donnera pas une erreur lors de la compilation ou de l'exécution, et il montre que vous pouvez faire une véritable instance de cette interface avec les deux méthodes appelables.
Je vois en utilisant la réflexion, il est possible d'implémenter n'importe quelle interface. – emory