(1) Tanto las clases abstractas como las interfaces pueden tener métodos abstractos.
(2) Las interfaces solo pueden tener constantes, no variables, mientras que las clases abstractas pueden tener tanto constantes como variables.
(3) Las clases abstractas también pueden tener métodos no abstractos, pero las interfaces no.
Al diseñar un programa, debe determinar si utilizar clases abstractas o interfaces basadas en un análisis específico. Además de proporcionar importantes métodos abstractos que las subclases deben anular, las clases abstractas también proporcionan variables y métodos no abstractos que las subclases pueden heredar.
Si un determinado problema necesita resolverse mejor usando la herencia, por ejemplo: además de anular el método abstracto de la clase principal, la subclase también necesita heredar algunas variables o heredar algunos métodos no abstractos importantes de la clase principal, puede considere usar tipo abstracto. Si un determinado problema no requiere herencia, solo requiere varias clases para proporcionar los detalles de implementación de algunos métodos abstractos importantes, puede considerar el uso de interfaces.
Nota : La interfaz JDK1.8 admite métodos estáticos y métodos predeterminados.
1) Las interfaces no se pueden utilizar para crear instancias de objetos.
2) La interfaz no tiene método constructor.
3) Todos los métodos de la interfaz deben ser métodos abstractos.
4) Las interfaces no pueden contener variables miembro, excepto variables estáticas y finales.
5) La clase no hereda la interfaz, sino que la clase la implementa.
6) La interfaz admite herencia múltiple.
El método predeterminado significa que la interfaz puede tener métodos de implementación y no necesita una clase de implementación para implementar sus métodos. Solo necesita agregar la palabra clave predeterminada delante del nombre del método para implementar el método predeterminado. Los métodos predeterminados proporcionan una forma de ampliar una interfaz sin romper el código existente.
(1) Una interfaz puede tener múltiples métodos predeterminados y métodos estáticos.
(2) El método predeterminado se llama a través de la instancia y el método estático se llama a través del nombre de la interfaz.
(3) La palabra clave predeterminada solo se puede utilizar en interfaces.
(4) Los métodos predeterminados se pueden heredar. Si hereda varias interfaces y varias interfaces definen varios métodos predeterminados iguales, la clase de implementación debe anular los métodos predeterminados; de lo contrario, se informará un error.
(5) Los métodos estáticos no se pueden heredar ni anular, por lo que solo pueden ser llamados por la interfaz específica.
Nota : Después de JDK 1.9, se permite definir métodos como privados, de modo que ciertos códigos reutilizados no expongan los métodos.