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 implementación.
Entonces, ¿podrían estos métodos considerarse abstractos? No son métodos abstractos "puros" ya que no estoy usando la abstract
palabra, pero conceptualmente, parece que sí.
¿Qué me puedes decir al respecto?
Gracias.
Respuestas:
Una interfaz es como una clase abstracta "puramente". 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, dado que no hay ninguna implementación, son útiles para su propósito: un contrato. Si implementa la interfaz, 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.
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 clase principal única. Algunos lenguajes le permiten heredar de múltiples clases y puede realizar el trabajo de una interfaz a través de una clase abstracta "puramente". Pero la herencia múltiple tiene sus problemas, es decir, el temido problema del diamante
fuente
Encontré una respuesta útil aquí: http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
fuente
Las clases abstractas pueden tener métodos abstractos.
Las interfaces solo pueden tener métodos abstractos.
method1()
ymethod2()
en tu ejemplo son métodos abstractos.fuente
La diferencia aquí es que las clases abstractas pueden contener detalles de implementación, aunque no pueden ser instanciadas por sí mismas. Mientras que una interfaz es simplemente una plantilla para una clase
fuente
Entonces, en una subclase, el método abstracto heredado puede volverse abstracto sin implementación, mientras que si una clase implementa una interfaz, su método debe implementarse.
fuente
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 método1 ni método método2 hasta que alguien agregue estos métodos a una clase.
fuente