¿Puedo considerar los métodos de interfaz como métodos abstractos?

14

Estaba pensando en eso, y tenía algunas dudas.

Cuando declaro una interfaz, por ejemplo:

public interface MyInterface
{
   public void method1();
   public void method2();
}

¿Podrían estos métodos de interfaz ser considerados abstractos? Lo que quiero decir es que el concepto de un método abstracto es:

  

Un método abstracto es un método que se declara, pero no contiene ninguna implementación.

Entonces, ¿podrían estos métodos ser considerados abstractos? No son métodos abstractos "puros" ya que no estoy usando la palabra abstract , pero conceptualmente, parece que sí.

¿Qué puedes decirme al respecto?

Gracias.

    
pregunta rogcg 30.09.2011 - 13:23

5 respuestas

14

Una interfaz es como una clase abstracta "puramente". La clase y todos de 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, entonces debe implementar los métodos en la interfaz.

Entonces, la diferencia es que una clase abstracta puede tener métodos implementados 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 a inherente de una sola clase padre. Algunos idiomas le permiten heredar de varias clases y podría 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 Diamond Problem

    
respondido por el coder 30.09.2011 - 15:24
10

Encontré una respuesta útil aquí: enlace

  

Todos los métodos en una interfaz son implícitamente abstractos, por lo que   el modificador abstracto no se usa con los métodos de interfaz (podría ser, es   simplemente no es necesario).

    
respondido por el rogcg 30.09.2011 - 13:36
4

Las clases abstractas pueden tener métodos abstractos.

Las interfaces solo pueden tener métodos abstractos.

method1() y method2() en su ejemplo son métodos abstractos.

    
respondido por el Tulains Córdova 21.08.2012 - 04:03
-1

La diferencia aquí es que las clases abstractas pueden contener detalles de implementación, aunque no pueden ser instanciadas por sí mismas. Considerando que una interfaz es simplemente una plantilla para una clase

    
respondido por el billy.bob 30.09.2011 - 13:34
-3

Las clases de interfaz no tienen métodos abstractos. No tienen ningún método en absoluto. Solo tienen una lista de métodos que otra clase tendría que implementar para poder ajustarse a la interfaz. En su ejemplo, no hay método method1 ni método method2 hasta que alguien agregue estos métodos a una clase.

    
respondido por el gnasher729 12.01.2017 - 14:23

Lea otras preguntas en las etiquetas