Las similitudes y diferencias entre clases e interfaces abstractas
1. Los mismos puntos entre los dos
1. No se puede crear una instancia directamente. Si se va a crear una instancia, las variables de clase abstractas deben apuntar al objeto de subclase que implementa todo. Los métodos abstractos y las variables de la interfaz deben apuntar a un objeto de clase que implementa todos los métodos de la interfaz.
2. Todos los métodos abstractos en una clase abstracta deben ser implementados por la subclase. Si la subclase no puede implementar todos los métodos abstractos de la clase principal, entonces la subclase solo puede ser una clase abstracta. Cuando una clase implementa una interfaz, si no puede implementar todos los métodos de la interfaz, entonces la clase solo puede ser una clase abstracta.
2. ¿Cuáles son las diferencias entre los dos?
1. Implementación del método predeterminado
Las clases abstractas pueden tener implementaciones de métodos predeterminadas, Java8 estipula que así sea; pueden ser interfaces Proporcione una implementación predeterminada del método y no lo fuerce.
2. Implementación
Cree una subclase para anular la subclase y use la palabra clave extends para heredar la clase abstracta. Si la subclase no es una clase abstracta, debe anular el método abstracto en la clase abstracta; la subclase de interfaz utiliza la palabra clave implements para implementar la interfaz y debe anular el valor predeterminado en la interfaz. ?
3. Constructor
Las clases abstractas pueden tener constructores, pero las interfaces no pueden tener constructores.
4. Diferencias con las clases Java normales
Excepto que no se pueden crear instancias de clases abstractas, no hay diferencia con las clases Java normales excepto que las interfaces son tipos completamente diferentes;
5. Modificadores de acceso
Los métodos abstractos pueden tener modificadores abstractos public.protected y default. No se puede modificar con privatestatic.synchronize o nativo;
El modificador predeterminado de la propiedad de la interfaz es publicstatic final (se debe asignar un valor inicial) y el modificador predeterminado del método es publicabstract. , comenzaron a aparecer métodos estáticos y se agregaron más palabras clave estáticas.
6. Método principal
Y puedes ejecutarlo; la interfaz no tiene un método principal, por lo que no puedes ejecutarlo.
7. Herencia múltiple
Una clase abstracta puede heredar una clase e implementar múltiples interfaces; una interfaz solo puede heredar una o más interfaces.
8. Velocidad
Las clases abstractas son más rápidas que las interfaces; las interfaces son ligeramente más lentas porque lleva tiempo encontrar el método de implementación en la clase.
9. Agregar nuevos métodos
Si agrega un nuevo método a una clase abstracta, puede proporcionarle una implementación predeterminada sin cambiar el código moderno; la interfaz, y este método no tiene implementación predeterminada, se debe cambiar la clase que implementa esta interfaz.
Información ampliada:
La importancia de las clases abstractas
En los métodos orientados a objetos, las clases abstractas se utilizan principalmente para ocultar tipos. Construya una descripción abstracta de un conjunto fijo de comportamientos, pero este conjunto de comportamientos puede tener cualquier cantidad de implementaciones concretas posibles.
Esta descripción abstracta es una clase abstracta, y este conjunto de posibles implementaciones concretas está representado por todas las clases derivadas posibles. Los módulos pueden operar sobre un cuerpo abstracto.
Debido a que el módulo depende de un cuerpo abstracto fijo, no se puede modificar al mismo tiempo, al derivar de este cuerpo abstracto, el comportamiento de este módulo también se puede ampliar;
Para implementar OCP (principio abierto-cerrado), uno de los principios básicos del diseño orientado a objetos, las clases abstractas son la clave.