Hablando sobre la diferencia y el uso de la interfaz java y la clase abstracta.


Prefacio

La herencia es una propiedad importante de la programación orientada a objetos (OOP). Es un mecanismo en Java que permite que una clase herede las características (campos y métodos) de otra clase. Hay dos palabras clave principales, "extiende" e "implementa", que se utilizan para la herencia en Java.


Sugerencia: El siguiente es el contenido de este artículo, los siguientes casos son para referencia

Definición de una, interfaz y clase abstracta

Interfaz (implementos)

En Java, la palabra clave implements se usa para implementar interfaces. Una interfaz es un tipo especial de clase, que implementa una abstracción completa y solo contiene métodos abstractos. Para acceder a los métodos de la interfaz, la interfaz debe ser "implementada" por otra clase con la palabra clave implements, y los métodos deben implementarse en una clase que herede las propiedades de la interfaz. Dado que las interfaces no tienen implementación de métodos, una clase puede implementar cualquier cantidad de interfaces a la vez. ,
Ejemplos:

// Defining an interface 
interface One {
    
     
    public void methodOne(); 
} 
  
// Defining the second interface 
interface Two {
    
     
    public void methodTwo(); 
} 
  
// Implementing the two interfaces 
class Three implements One, Two {
    
     
    public void methodOne() 
    {
    
     
  
        // Implementation of the method 
    } 
  
    public void methodTwo() 
    {
    
     
  
        // Implementation of the method 
    } 
} 

Varios ejemplos de implementación:


brightness_4
// Defining the interface One 
interface One { 
    void methodOne(); 
} 
  
// Defining the interface Two 
interface Two { 
    void methodTwo(); 
} 
  
// Interface extending both the 
// defined interfaces 
interface Three extends One, Two { 
} 

Resumen (extiende)

En Java, la palabra clave extiende se usa para indicar que la clase que se define se deriva de la clase base usando herencia. Entonces, básicamente, la palabra clave extiende se usa para extender las funciones de la clase principal a la clase secundaria. En Java, no se permite la herencia múltiple. Por lo tanto, una clase solo puede extender una clase para evitar ambigüedades.
ejemplo:


class One {
    
     
    public void methodOne() 
    {
    
     
  
        // Some Functionality 
    } 
} 
  
class Two extends One {
    
     
  
    public static void main(String args[]) 
    {
    
     
        Two t = new Two(); 
  
        // Calls the method one 
        // of the above class 
        t.methodOne(); 
    } 
} 

Ejemplo: pandas es una herramienta basada en NumPy, que fue creada para resolver tareas de análisis de datos.

2. Interfaz de contraste y abstracción

Número de serie \ clase Interfaz (implementos) Resumen (extiende)
1 Al usar la palabra clave "implements", las clases pueden implementar interfaces Al usar la palabra clave "extiende", una clase puede heredar otra clase o una interfaz puede heredar otras interfaces
2 La clase que implementa la interfaz debe implementar todos los métodos de la interfaz La extensión de la subclase de la superclase no cubre necesariamente todos los métodos de la superclase
3 Una clase puede implementar cualquier número de interfaces a la vez Una clase solo puede extender una superclase
3 Una interfaz nunca puede implementar ninguna otra interfaz Se puede ampliar cualquier número de interfaces a través de interfaces

Tres escenarios de uso

Cuatro, expansión

Después de Java 8, las interfaces también se pueden implementar mediante métodos

A partir de Java 8, la interfaz ha agregado soporte para el método predeterminado. Después de Java 9, incluso puede definir un método predeterminado privado. El método predeterminado proporciona una forma binaria compatible de ampliar la interfaz existente. Por ejemplo, estamos familiarizados con java.util.Collection, que es la interfaz raíz del sistema de recopilación. Se han agregado una serie de métodos predeterminados a Java 8, principalmente para aumentar las funciones relacionadas con Lambda y Stream. Para las clases de herramientas como Colecciones que mencioné anteriormente en la columna, muchos métodos son adecuados para implementarse como métodos predeterminados en la interfaz básica.

public interface Collection<E> extends Iterable<E> {
     /**
     * Returns a sequential Stream with this collection as its source 
     * ...
     **/
     default Stream<E> stream() {
         return StreamSupport.stream(spliterator(), false);
     }
  }


para resumir

1 Es necesario tener un conocimiento profundo de las tres características de la orientación a objetos: encapsulación, herencia y polimorfismo.
2 Es necesario comprender los principios de diseño más básicos en el desarrollo diario. Los seis principios del modo de diseño SOLID deben dominarse (agregaré contenido relevante en el blog más adelante).
Responsabilidad única (responsabilidad única), es mejor que una clase u objeto tenga una sola responsabilidad.Si se descubre que una determinada clase tiene múltiples obligaciones en el diseño del programa, considere dividirla.

El principio del interruptor (Abrir-Cerrar, Abrir para extensión, cerrar para modificación), el diseño debe estar abierto a extensión y cerrado a modificación. En otras palabras, el diseño del programa debe garantizar una escalabilidad fluida y tratar de evitar modificar las implementaciones existentes debido a la adición de funciones similares, para producir menos problemas de regresión.

La sustitución de Liskov (sustitución de Liskov) es uno de los elementos básicos de la orientación a objetos Al abstraer la relación de herencia, dondequiera que se pueda usar la clase principal o base, se puede reemplazar con una subclase.

Segregación de interfaces. Cuando diseñamos clases e interfaces, si se definen demasiados métodos en una interfaz, sus subclases pueden enfrentar un dilema, es decir, solo algunos métodos son significativos para ella, lo que destruye Cohesión del programa.
En este caso, el comportamiento se puede desacoplar dividiéndolo en múltiples interfaces con una sola función. En el mantenimiento futuro, si cambia el diseño de una interfaz, no afectará a las subclases que usan otras interfaces.

Inversión de dependencia, las entidades deben basarse en la abstracción en lugar de la implementación. En otras palabras, los módulos de alto nivel no deben basarse en módulos de bajo nivel, sino que deben basarse en la abstracción. La práctica de este principio es un arma mágica para garantizar un acoplamiento adecuado entre los códigos de producto.

Supongo que te gusta

Origin blog.csdn.net/aa327056812/article/details/109600518
Recomendado
Clasificación