Bueno, 'Interfaz abstracta' es una construcción léxica: http://en.wikipedia.org/wiki/Lexical_analysis .
Es requerido por el compilador, también puedes escribir interface
.
Bueno, no entres demasiado en la construcción léxica del lenguaje, ya que podrían haberlo puesto allí para resolver alguna ambigüedad de compilación que se denomina casos especiales durante el proceso de compilación o por alguna compatibilidad con versiones anteriores, intenta concentrarte en la construcción léxica central.
La esencia de `interface es capturar algún concepto abstracto (idea / pensamiento / pensamiento de orden superior, etc.) cuya implementación puede variar ... es decir, puede haber implementación múltiple.
Una interfaz es un tipo de datos abstracto puro que representa las características del objeto que está capturando o representando.
Las características se pueden representar por espacio o por tiempo. Cuando están representados por el espacio (almacenamiento de memoria) significa que su clase concreta implementará un campo y método / métodos que operarán en ese campo o por tiempo, lo que significa que la tarea de implementar la característica es puramente computacional (requiere más relojes de CPU para el procesamiento) para que tenga una compensación entre el espacio y el tiempo para la implementación de características.
Si su clase concreta no implementa todas las características, nuevamente se vuelve abstracta porque tiene una implementación de su pensamiento o idea o abstracción pero no está completa, especifíquela por abstract
clase.
Una clase concreta será una clase / conjunto de clases que capturará completamente la abstracción que está tratando de capturar la clase XYZ.
Entonces el patrón es
Interface--->Abstract class/Abstract classes(depends)-->Concrete class