La diferencia entre clases abstractas e interfaces
Una clase que declara la existencia de un método sin implementarlo se llama clase abstracta. Se utiliza cuando desea crear una clase que incorpore algún comportamiento básico y declarar un método para esta clase, pero no puede implementar esta clase en esta clase. No se pueden crear instancias de clases abstractas. Sin embargo, puede crear una variable de tipo clase abstracta y apuntarla a una instancia de una subclase concreta. No puede haber constructores abstractos ni métodos estáticos abstractos. Las subclases de una clase abstracta proporcionan implementaciones para todos los métodos abstractos en su clase principal; de lo contrario, también son clases abstractas. En su lugar, implemente este método en una subclase. Otras clases que conozcan su comportamiento pueden implementar estos métodos en su clase.
Las interfaces son variaciones de clases abstractas. En una interfaz, todos los métodos son abstractos. La herencia múltiple se logra implementando dicha interfaz. Todos los métodos de una interfaz son abstractos y no tienen cuerpo de programa. Las interfaces solo pueden definir variables miembro finales estáticas. La implementación de una interfaz es similar a la implementación de una subclase, excepto que la clase de implementación no puede heredar el comportamiento de la definición de la interfaz. Cuando una clase implementa una interfaz particular, define (es decir, le da el cuerpo del programa) todos los métodos de dicha interfaz. Luego puede llamar a los métodos de la interfaz en cualquier objeto de la clase que implemente la interfaz. Debido a la clase abstracta, permite usar el nombre de la interfaz como tipo de variable de referencia. El enlace dinámico habitual entrará en vigor. Las referencias se pueden convertir hacia y desde tipos de interfaz, y el operador instancia de se puede utilizar para determinar si la clase de un objeto implementa la interfaz.
Las interfaces se pueden heredar de las interfaces. Las clases abstractas pueden implementar interfaces y las clases abstractas pueden heredar clases de entidad, pero solo si la clase de entidad tiene un constructor explícito. La interfaz se centra más en "qué funciones se pueden lograr" que en "cómo implementarlas".
1. Similar
A. Ambas son clases abstractas y no se pueden crear instancias.
B. Tanto la clase de implementación de la interfaz como las subclases de la clase abstracta deben implementar el método abstracto declarado.
2. Diferencias
A. Las interfaces deben implementarse e implementarse, mientras que las clases abstractas deben heredarse y ampliarse.
Una clase puede implementar múltiples interfaces, pero una clase solo puede heredar una clase abstracta.
C. Las interfaces enfatizan la implementación de funciones específicas y las clases abstractas enfatizan las relaciones.
D. Aunque la clase de implementación de la interfaz y la subclase de la clase abstracta deben implementar el método abstracto correspondiente, las formas de implementación son diferentes. Cada método en la interfaz es un método abstracto, con solo una declaración (sin cuerpo de método), y la clase de implementación debe implementarlo. Opcionalmente se pueden implementar subclases de clases abstractas.
Esta elección tiene dos significados:
Primero, no todos los métodos en la clase abstracta son abstractos. Solo aquellos métodos con resumen son abstractos y las subclases deben cumplir. Para aquellos métodos que no son abstractos, el cuerpo del método debe definirse en la clase abstracta.
En segundo lugar, las subclases de clases abstractas pueden heredar o anular directamente métodos no abstractos cuando los heredan. Para los métodos abstractos, puede optar por implementarlos o puede declarar sus métodos como abstractos nuevamente y dejarlos así; Sus subclases se implementan sin implementar, pero esta clase también debe declararse abstracta. Es una clase abstracta y, por supuesto, no se pueden crear instancias.
E. Las clases abstractas son las intermediarias entre interfaces y clases.
La interfaz es completamente abstracta. Solo puede declarar métodos y también puede declarar métodos públicos. No puede declarar métodos privados y protegidos, no puede declarar cuerpos de métodos y no puede declarar variables de instancia. Sin embargo, la interfaz puede declarar variables constantes y no es difícil encontrar ejemplos de este tipo en JDK. Pero poner variables constantes en una interfaz anula el propósito de su existencia como interfaz y también confunde los diferentes valores de la interfaz y la clase. Si es necesario, se puede colocar en la clase o clases abstractas correspondientes.
Las clases abstractas juegan un papel conector en interfaces y clases.
Por un lado, una clase abstracta es abstracta y puede declarar métodos abstractos para estandarizar las funciones que las subclases deben implementar; por otro lado, puede definir un cuerpo de método predeterminado para que las subclases lo utilicen o lo anulen directamente; Además, puede definir sus propias variables de instancia para que las utilicen las subclases mediante herencia.
3. Aplicación de interfaces
A. Las clases requieren que se coordinen interfaces específicas antes de la clase, independientemente de cómo se implementen.
B. Existe como un logotipo que puede implementar funciones específicas, o puede ser un logotipo puro sin ningún método de interfaz.
C. Un grupo de clases debe tratarse como una sola clase y la persona que llama solo se comunica con este grupo de clases a través de la interfaz.
d. Es necesario implementar muchas funciones específicas, y estas funciones pueden no tener ninguna relación.
4. Ocasiones de aplicación de clases abstractas
En resumen, puedes usarlo cuando necesites tanto una interfaz unificada como variables de instancia o métodos predeterminados. Los más comunes son:
A. Defina un conjunto de interfaces, pero no quiera forzar a cada clase de implementación a implementar todas las interfaces. Puede utilizar una clase abstracta para definir un conjunto de cuerpos de métodos, incluso cuerpos de métodos vacíos, y luego las subclases pueden elegir los métodos que les interesan cubrir.
B. En algunos casos, la coordinación entre clases no se puede satisfacer solo a través de interfaces puras, y es necesario distinguir diferentes relaciones a través de variables que representan estados en la clase. La mediación abstracta sirve bien para esto.
C. Un conjunto coordinado de métodos está estandarizado. Algunos métodos son iguales, independientes del estado y se pueden disfrutar sin subclases. Otros métodos requieren que cada subclase implemente funciones específicas de acuerdo con su propio estado específico.