¿Son abstractos todos los métodos de la interfaz?

Veo que está escrito en la mayoría de los lugares,

"All of the methods in an interface are abstract." 

Pero una interfaz también puede contener default methods y default methods static methods y cuerpos de método existen para métodos predeterminados y métodos estáticos.

Así son todos los métodos de interfaz abstracta?

Eso es correcto

Todos sus métodos son abstractos, independientemente de sus modificadores de acceso.

Una explicación perfecta por @coder :

Una interfaz es como una clase "puramente" abstracta. La clase y todos sus métodos son abstractos. Una clase abstracta puede tener métodos implementados, pero la clase en sí no puede ser instanciada (útil para la herencia y después de DRY).

Para una interfaz, ya que no hay ninguna implementación en absoluto son útiles para su propósito: un contrato. Si implementa la interfaz, debe implementar los métodos en la interfaz.

Así que la diferencia es que una clase abstracta puede haber implementado métodos mientras que una interfaz no puede.

La razón por la que están separados es para que una clase pueda implementar varias interfaces. Java y C # restringen una clase inherente a una sola clase padre. Algunos lenguajes te permiten heredar de varias clases y puedes realizar el trabajo de una interfaz a través de una clase abstracta "puramente". Pero la herencia múltiple tiene sus problemas, a saber, el temido problema del diamante

Echa un vistazo a Oracles docs sobre métodos abstractos y clases.

Desde Java 8, una interfaz también puede contener métodos predeterminados y métodos estáticos junto con métodos abstractos. Existen cuerpos de métodos para los métodos predeterminados y estáticos.

Uno de los mayores cambios de diseño en Java 8 es con el concepto de interfaces. Antes de Java 7, sólo podíamos tener declaraciones de método en las interfaces. Pero a partir de Java 8, podemos tener métodos predeterminados y métodos estáticos en las interfaces.

Método predeterminado de interfaz

Para crear un método predeterminado en la interfaz, necesitamos usar la palabra clave "default" con la firma del método.

Métodos estáticos de la interfaz

Los métodos estáticos son similares a los métodos predeterminados, excepto que no podemos reemplazarlos en las clases de implementación. Esta característica nos ayuda a evitar los resultados no deseados en caso de implementación deficiente en las clases infantiles.

Para más ver esto

Todos los métodos en una interfaz son abstractos. Esta afirmación es Verdadera. Es obligatorio para una interfaz tener métodos abstractos sólo para aplicar herencia múltiple.

  • Android Studio: El módulo no aparecerá en "Editar configuración"
  • ¿Cómo editar / cambiar la vista desde el diseño en RemoteView o crear RemoteView desde la vista?
  • Importar proyecto java de origen en el proyecto de Android
  • Cordova: ¿Cómo escribir plugins nativos que pueden invocar repetidamente una devolución de llamada Javascript?
  • Java - la mejor manera de implementar una matriz dinámica de objetos
  • ¿Cómo obtener el tamaño en memoria de un objeto en Android, o puntos de referencia de rendimiento?
  • Copiar directorio, sub directorios y archivos a la tarjeta sd - android
  • ViewPagerIndicator - Establece TabPageIndicator en el centro
  • @SuppressWarnings vs @SuppressLint
  • Cómo convertir JSONArray a ListView?
  • Android escalonado / multilínea Linear Layout?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.