Una breve respuesta a la diferencia entre clases abstractas e interfaces
Diferencia:
1. Diferencia conceptual:
Las clases abstractas se extraen de ciertos atributos de las clases que tienen (por ejemplo, algunas mismas variables miembro, métodos). con los mismos atributos (modificadores, nombres de funciones, tipos de parámetros, número de parámetros) Tenga en cuenta que el modificador del método puede ser público o protegido (porque si es privado, la subclase no se puede heredar. Las subclases no pueden heredar lo privado). ), y el valor predeterminado es público sin modificadores. Las clases abstractas se centran en la abstracción de la clase en sí. Los métodos abstractos no tienen cuerpo de método, sino que simplemente declaran el método y dejan que las subclases que lo heredan lo implementen.
Una interfaz es una abstracción del comportamiento de una clase. Las interfaces pueden tener variables y métodos, pero los modificadores de variables y métodos deben ser público estático final (valor predeterminado cuando se omite) y público abstracto (valor predeterminado cuando se omite).
Nota:
Después de Java 8, se realizaron nuevas modificaciones en la interfaz, permitiendo que la interfaz tenga un método predeterminado, lo que significa que puede agregar una implementación de la interfaz, para que la interfaz La clase herede los métodos predeterminados implementados por la interfaz sin ningún cambio, lo que hace que la interfaz sea más similar a una clase abstracta (porque una clase abstracta no solo tiene métodos abstractos sino también métodos concretos);
2. La diferencia en la definición de sintaxis:
La clase abstracta se compone de una clase abstracta pública nombre de clase abstracta {variable miembro 1...n tipo de retorno abstracto público nombre de método abstracto; 1.. .n (tipo de parámetro, nombre de parámetro 1 ...n){};} para definir. Las clases abstractas también pueden tener métodos que no sean métodos abstractos. Las dos últimas líneas simplemente ilustran la definición sintáctica del método abstracto.
La interfaz consta del nombre de la interfaz de la interfaz pública {variable de miembro final estática pública 1...n; nombre del método de tipo de retorno abstracto público 1...n (tipo de parámetro, nombre de parámetro 1...n) {} ;} para definir. Las interfaces solo pueden contener métodos abstractos (este era el caso antes), y después de Java 8, las interfaces pueden contener métodos de implementación predeterminados (esto se introdujo anteriormente y se repite aquí).
3. La diferencia entre herencia única y herencia múltiple:
En el lenguaje de programación Java, solo se permite la herencia única entre clases, es decir, una clase solo puede heredar una clase abstracta. ; Pero una clase puede implementar múltiples interfaces implementando interface1...n, logrando herencia múltiple.
4. Se pueden incluir métodos constructores:
Las interfaces no permiten métodos constructores porque las variables miembro de la interfaz son todas variables finales estáticas y se inicializan en el momento de la compilación. no es necesario inicializarlo a través del método constructor, y el método de interfaz es un método abstracto. Al igual que la clase abstracta, solo se implementa después de que se declara la clase para refinar el cuerpo del método, mientras que el método de interfaz es un método abstracto. como la clase abstracta Solo se permite implementarla después de la declaración de la clase. Las clases abstractas pueden tener métodos constructores. Debido a que, excepto los métodos abstractos, las clases abstractas en realidad no son diferentes de las clases ordinarias, algunas operaciones de inicialización se pueden completar mediante métodos constructores.
Los mismos puntos:
1. No se pueden crear instancias, es decir, no se les puede asignar espacio directamente con new(), pero se deben crear instancias heredando o implementando. sus clases.
2. Las clases que los heredan o implementan deben implementar todos sus métodos abstractos. Si una clase que hereda una clase abstracta no implementa todos los métodos abstractos, sigue siendo una clase abstracta.
Consejos de uso:
Cuando necesitamos estudiar las propiedades esenciales de las cosas, podemos considerar el uso de clases abstractas para abstraer sus atributos, lo que puede reducir la cantidad de código y optimizar la estructura del programa. ;
Cuando queremos estudiar un determinado comportamiento, podemos considerar el uso de interfaces que abstraen los métodos **** (comportamientos) de muchas clases, lo que permite su uso en el. de la misma manera. Después de abstraer (el comportamiento), diferentes clases pueden implementar métodos que pertenecen a esa clase y las devoluciones de llamada de la interfaz se pueden implementar a través de variables de interfaz.
Suplemento:
Variables de interfaz: Las interfaces pueden declarar variables, llamadas variables de interfaz.
Las variables de interfaz pueden guardar una referencia (dirección) a un objeto, lo que requiere que la clase del objeto implemente la interfaz correspondiente.
Devolución de llamada de interfaz: se refiere a asignar la referencia del objeto de clase que implementa la interfaz a la variable de interfaz declarada para la interfaz.
Llame al método de interfaz implementado por esta clase a través de la variable de interfaz.
Los métodos declarados en una interfaz no implementada de una clase no se pueden llamar a través de variables de interfaz.
Autor: That Star Aaron
Dirección del enlace: enlace de Internet
Fuente: CSDN
CSDN
Fuente :CSDNCSDN