Este artículo describe el uso de interfaces y clases abstractas en Java. Compártelo para su referencia, como sigue:
En el concepto orientado a objetos, sabemos que todos los objetos están representados por clases, pero no todas las clases se usan para describir objetos. Si una clase no contiene suficiente información para describir un objeto concreto, dicha clase es una clase abstracta.
Las clases abstractas a menudo se usan para representar conceptos abstractos que obtenemos en el análisis y el diseño del campo de problemas. Son abstracciones de una serie de conceptos concretos que parecen diferentes pero que son esencialmente las mismas. No podemos instanciarlos (no se les ocurre una cosa concreta), por lo que los llamamos abstracciones.
Por ejemplo: cuando queremos describir "fruta", es una abstracción. Tiene algunas características comunes, como la masa y el volumen (las frutas tienen masa), pero carece de características (las manzanas y las naranjas son frutas, y tienen sus propias características). No se nos ocurre lo único que puede representar frutas (porque las manzanas y las naranjas no pueden representar frutas). Las clases abstractas se pueden usar para describirlo, por lo que las clases abstractas no pueden ser instanciadas. Cuando usamos una determinada clase para describir "manzanas", esta clase puede heredar la clase abstracta que describe "fruta". Todos sabemos que las "manzanas" son una especie de "fruta".
En el campo orientado a objetos, las clases abstractas se utilizan principalmente para escondite de tipo. Podemos construir una descripción abstracta fija de un conjunto de comportamientos, pero este conjunto de comportamientos puede tener posibles métodos de implementación concretos. Esta descripción abstracta es una clase abstracta, y este conjunto de posibles implementaciones concretas se manifiesta como todas las clases derivadas de esta clase abstracta.
Todos los métodos abstractos en interfaces y clases abstractas no pueden implementarse en implementaciones concretas, pero deben implementar todos los métodos abstractos en sus subclases (debe tener un cuerpo de funciones, incluso si está vacío en {}). Los diseñadores de Java pueden considerar la flexibilidad de los métodos abstractos, y cada subclase puede implementar métodos abstractos de acuerdo con sus propias necesidades.
La definición de clase abstracta es la siguiente:
Public Abstract Class AbstractClass // Hay al menos un método abstracto en él {public int t; // Miembro de datos ordinarios Método de abstracto público void1 (); // método abstracto, las subclases de la clase abstracta deben implementar métodos abstractos en la clase abstracta en la clase pública abstract void método2 (); Método público público 3 (); // Método no abstracto público int Method4 (); Public int Method4 () {... // La clase abstracta se puede asignar al comportamiento predeterminado de los métodos de métodos no abstractos, es decir, la implementación concreta del método} public void Method3 () {... // La clase abstracta se puede asignar al comportamiento predeterminado de los métodos de métodos no abstractos, es decir, la implementación concreta del método}}La definición de una interfaz es la siguiente:
Interfaz de interfaz pública Interface {static final int i; // No puede haber miembros de datos ordinarios en la interfaz, solo miembros de datos estáticos que no pueden modificarse. Satáticos significa global, los medios finales no se pueden modificar. Se puede modificar sin una modificación final estática, y se declarará implícitamente como el método void público estático y final1 (); // Los métodos en la interfaz deben ser métodos abstractos, por lo que Public void Method2 () no necesita modificación abstracta; // El comportamiento predeterminado de los métodos no se puede asignar a la interfaz, es decir, no puede haber una implementación específica del método}En resumen, las clases abstractas son clases incompletas, y las interfaces son solo colecciones de declaraciones de métodos abstractos y datos estáticos que no pueden modificarse, ninguna de las cuales puede ser instanciada.
En cierto sentido, una interfaz es una forma especial de clase abstracta. En el idioma Java, las clases abstractas representan una relación de herencia. Una clase solo puede heredar una clase abstracta, mientras que una clase puede implementar múltiples interfaces. En muchos casos, las interfaces pueden reemplazar las clases abstractas, si no necesita expresar deliberadamente la herencia en los atributos.
Para comprender mejor, con el propósito de que Java introduzca clases e interfaces abstractas, las respuestas que obtuve de los expertos son las siguientes:
1. Desde la perspectiva de la jerarquía de clases, las clases abstractas están en la parte superior del nivel, pero en el diseño real, las clases abstractas generalmente deberían aparecer más tarde. ¿Por qué? De hecho, la adquisición de clases abstractas es un poco como extraer factores comunes en matemáticas: AX+BX, X es una clase abstracta. Si no tiene la fórmula anterior, ¿cómo sabe si X es un factor común? En este sentido, también está en línea con el proceso de las personas de comprender el mundo, primero concreto y luego abstracto. Por lo tanto, si obtiene muchos conceptos específicos y encuentra puntos en común en el proceso de diseño, debe ser cierto que esta colección de puntos en común es una clase abstracta.
2. En la superficie, la interfaz es muy similar a las clases abstractas, pero su uso es completamente diferente. Su función básica es reunir algunas clases (conceptos) irrelevantes para formar una nueva "nueva clase" operable centralmente operable. Un ejemplo típico que doy a los estudiantes es "conductor". ¿Quién puede ser un conductor? Cualquiera puede hacerlo, siempre y cuando obtenga su licencia de conducir. Por lo tanto, no me importa si eres un estudiante, un trabajador de cuello blanco, un trabajador de cuello azul o un jefe, siempre que tengas una licencia de conducir, eres un conductor.
interfaz conducticence {licencia getlicence (); } La clase StudentDriver extiende el estudiante implementa la conducción {} class whtiecOllarEmployEdRiver extiende que el empleado de los implementados implementa la conducticencia {} de la clase blueCollarEmployEedriver extiende blueCollarMeMeMaMeMeee Implements Drivilicence {} Class BossDriver extiende el controlador del jefe {}Cuando define la clase de "auto", puedo especificar el "controlador".
Class Car {setdriver (conductor conductor);}En este momento, el objeto de automóvil no le importaba lo que hizo el conductor. Su único punto común era que habían obtenido una licencia de conducir (ambos implementaron la interfaz de conducir). Esta debería ser la parte más poderosa de la interfaz y es incomparable a las clases abstractas.
Resumir:
Las clases abstractas extraen factores comunes de clases de concreto, mientras que las interfaces son "hash" algunas clases no relacionadas en un grupo común. Por lo general, desarrollamos un buen hábito de usar múltiples interfaces. Después de todo, Java es una herencia única, a diferencia de C ++, pero debe usarse cuando se usa clases abstractas (algo similar a GOTO), jaja.
Espero que este artículo sea útil para la programación Java de todos.