Una clase que contiene el modificador abstracto es una clase abstracta y una clase abstracta no puede crear objetos de instancia. Las clases que contienen métodos abstractos deben definirse como clases abstractas y los métodos de las clases abstractas no tienen que ser abstractos. Los métodos abstractos definidos en una clase abstracta deben implementarse en una subclase concreta, por lo que no puede haber constructores abstractos ni métodos estáticos abstractos. Si la subclase no implementa todos los métodos abstractos en la clase padre abstracta, entonces la subclase también debe definirse como tipo abstracto.
Se puede decir que una interfaz es un caso especial de clase abstracta y todos los métodos de la interfaz deben ser abstractos. Las definiciones de métodos en la interfaz tienen por defecto el tipo abstracto público, y los tipos de variables miembro en la interfaz tienen por defecto el tipo público estático final.
Comparemos las diferencias gramaticales entre los dos :
1. Las clases abstractas pueden tener constructores, pero las interfaces no pueden tener constructores.
2. Puede haber variables miembro ordinarias en clases abstractas, pero no hay variables miembro ordinarias en interfaces.
3. Las clases abstractas pueden contener métodos ordinarios no abstractos. Todos los métodos en la interfaz deben ser abstractos y no puede haber métodos ordinarios no abstractos.
4. Los tipos de acceso de métodos abstractos en clases abstractas pueden ser públicos, protegidos y (tipo predeterminado, aunque
No se informa ningún error en eclipse, pero no debería funcionar), pero el método abstracto en la interfaz solo puede ser de tipo público y el valor predeterminado es el tipo abstracto público.
5. Las clases abstractas pueden contener métodos estáticos, pero las interfaces no pueden contener métodos estáticos.
6. Tanto las clases abstractas como las interfaces pueden contener variables miembro estáticas. El tipo de acceso de las variables miembro estáticas en las clases abstractas puede ser arbitrario, pero las variables definidas en las interfaces solo pueden ser de tipo final estático público y el valor predeterminado es el tipo final estático público.
7. Una clase puede implementar múltiples interfaces, pero solo puede heredar una clase abstracta.
Hablemos de las diferencias entre los dos en la aplicación :
Las interfaces desempeñan un papel más importante en los métodos de diseño de la arquitectura del sistema y se utilizan principalmente para definir contratos de comunicación entre módulos. Las clases abstractas desempeñan un papel en la implementación del código y pueden realizar la reutilización del código. Por ejemplo, el patrón de diseño del método de plantilla es una aplicación típica de las clases abstractas. Se supone que todas las clases de Servlet en un proyecto deben usar el mismo método para determinar permisos y registros. Registrar y manejar excepciones, luego puede definir una clase base abstracta para que todos los servlets hereden esta clase base abstracta. En el método de servicio de la clase base abstracta, se completan el juicio de permisos, el registro del registro de acceso y el código de manejo de excepciones. Solo complete sus respectivos códigos de lógica de negocios. El pseudocódigo es el siguiente: