¿Cuál es la diferencia entre "clase abstracta" e "interfaz"?
La diferencia entre "clase abstracta" e "interfaz":
1. Las interfaces se pueden implementar mediante múltiples implementaciones*, mientras que las clases abstractas solo se pueden extender con una única extensión.
2. Las interfaces solo tienen definiciones, mientras que las clases abstractas pueden tener definiciones e implementaciones.
3. La definición del campo de la interfaz tiene como valor predeterminado: final estático público y el campo de clase abstracta tiene como valor predeterminado "amigable".
4. Las interfaces no tienen métodos constructores, mientras que las clases abstractas pueden tener métodos constructores.
Clase abstracta
La clase abstracta se utiliza para capturar las características comunes de las subclases. No se puede crear una instancia de ella y solo se puede utilizar como superclase para subclases. Las clases abstractas son plantillas que se utilizan para crear subclases en la jerarquía de herencia.
Interfaz
Una interfaz es una colección de métodos abstractos. Si una clase implementa una interfaz, hereda los métodos abstractos de esta interfaz. Esto es como el patrón de contrato, si implementa esta interfaz, debe asegurarse de que se utilicen estos métodos. Una interfaz es sólo un formulario, no puede hacer nada por sí sola.
Información ampliada:
Capa de definición de sintaxis
En el modo de clase abstracta, Demo puede tener sus propios miembros de datos o métodos de miembros no abstractos. En el modo de interfaz, la demostración solo puede tener miembros de datos estáticos que no se pueden modificar y todos los métodos de los miembros son abstractos.
Nivel de programación
La clase abstracta representa una relación de herencia en el lenguaje Java, y una clase solo puede usar la relación de herencia una vez. Sin embargo, una clase puede implementar múltiples interfaces.
Nivel de concepto de diseño
La clase abstracta incorpora una relación de herencia en el lenguaje Java. Para que la relación de herencia sea razonable, debe existir "es un" entre la clase principal y la clase derivada. La relación, es decir, la clase principal y la clase derivada, deben ser conceptualmente las mismas.
Este no es el caso de las interfaces. No se requiere que el implementador de la interfaz y la definición de la interfaz sean conceptualmente consistentes, solo implementen el contrato (función) definido por la interfaz.
Material de referencia: Enciclopedia Baidu: clase abstracta de Java
importnew: la diferencia entre la clase abstracta de Java y la interfaz