I recently attended an interview and they asked me the question \"Why Interfaces are preferred over Abstract classes?\"
I tried giving a few answers like:
There is one reason not mentioned by the above.
You can decorate any interface easily with java.lang.reflect.Proxy allowing you to add custom code at runtime to any method in the given interface. It is very powerful.
See http://tutorials.jenkov.com/java-reflection/dynamic-proxies.html for a tutorial.