Interfaz 【Java】

La interfaz evolucionó a partir de clases abstractas.

Una clase abstracta puede contener uno o más métodos abstractos. Incluso cuando no hay un método abstracto, esta clase se puede declarar como una clase abstracta para evitar su instanciación.

Pero en la interfaz, todos los métodos deben ser abstractos y no pueden contener cuerpos de métodos. Se puede decir que las interfaces son más abstractas que las clases abstractas. Utilice la palabra clave de la interfaz para declarar.

Al igual que las clases, las interfaces se pueden heredar y las interfaces se pueden heredar varias veces.


1. No se pueden crear instancias de la interfaz. No está permitido usar la palabra clave new para construir una instancia de una interfaz. No existe un método de construcción para las interfaces.


2. Intentar definir variables de instancia en la interfaz, métodos de instancia no abstractos y métodos estáticos, es ilegal.

1) Los métodos en la interfaz son abstractos públicos por defecto.

Imagínese, si los métodos en la interfaz se pueden declarar como estáticos,

Entonces se puede llamar por el nombre de clase .method (), pero el método en la interfaz no tiene entidad, por lo que es contradictorio. ¿Cómo llamarlo?


2) Las variables miembro declaradas en la interfaz son públicas estáticas finales por defecto, que se consideran constantes estáticas y deben inicializarse explícitamente.

Entonces, ¿por qué las variables miembro en la interfaz deben ser estáticas finales públicas?

Como plantilla muy abstracta, se debe implementar una interfaz para que tenga sentido y debe ser pública a este nivel.

Los atributos de la interfaz también son miembros de la plantilla. En otras palabras, todas las clases de implementación de la interfaz deben compartir este atributo, por lo que debe ser público estático. 

En segundo lugar, si las variables no finales se pueden definir en la interfaz y los métodos son abstractos, entonces existe una contradicción: hay variables miembro, pero el método no puede operar estas

Variables de miembro. Aunque una determinada clase de implementación puede modificar directamente el valor de estas variables miembro estáticas a través de la variable de nombre de clase, de esta manera, todos los valores de variable correspondientes de la clase de implementación son

Modificado, ¿cuál es la diferencia entre esta y la clase abstracta? Por lo tanto, las variables no pueden aparecer en la interfaz, si hay variables, es contradictorio con la idea abstracta unificada que propone la interfaz.

Por lo tanto, las propiedades en la interfaz deben ser constantes, legibles y no escribibles, para proporcionar propiedades uniformes para los objetos que implementan la interfaz.

Una interfaz es un nivel más alto de abstracción, una especificación y una declaración de definiciones de función Todas las cosas variables deben atribuirse a la clase de implementación, de modo que la interfaz pueda desempeñar un papel estandarizado y estandarizado.


3. Una interfaz no implementa otra interfaz, pero puede heredar muchas otras interfaces Las múltiples características de herencia de la interfaz constituyen la herencia única de la clase.

public interface SataHdd extends A, B{

    public static final int CONNECT_LINE=4;
    public void writeData(String data);
    public String readData();
}

interface A {
	public void a();
}
interface B {
	public void B();
}

4. Una clase solo puede heredar una clase principal, pero puede implementar varias interfaces

El formato de la interfaz de implementación es el siguiente:
modificador clase nombre de clase extiende clase padre implementa múltiples interfaces {     método de implementación } Si una clase no puede implementar todos los métodos abstractos de la interfaz, entonces esta clase debe definirse como un método abstracto.



5. Por qué utilizar interfaces En el


desarrollo de grandes proyectos, puede ser necesario insertar una clase desde la mitad de la cadena de herencia para que sus subclases tengan ciertas funciones sin afectar a su clase padre. Por ejemplo, A -> B -> C -> D -> E. A es una clase antecesora. Si necesita agregar algunas funciones comunes a las clases C, D y E, la forma más sencilla es dejar que la clase C herede otra clase. Pero aquí viene el problema. Java es un lenguaje de herencia única. C ya no puede heredar otra clase padre. Solo se mueve a la parte superior de la cadena de herencia y deja que A herede otra clase padre. De esta forma, las modificaciones a las clases C, D y E afectan a toda la cadena de herencia y no existe un diseño conectable.

La interfaz es una garantía de capacidad de conexión. Cualquier clase en una cadena de herencia puede implementar una interfaz. Esta interfaz afectará a todas las subclases de esta clase, pero no afectará a ninguna clase padre de esta clase. Esta clase tendrá que implementar los métodos especificados por esta interfaz, y las subclases pueden heredar automáticamente estos métodos de esta clase. En este momento, estas subclases son conectables.

Lo que nos importa no es qué clase específica, sino si esta clase implementa la interfaz que necesitamos.

La interfaz proporciona la capacidad de conexión de las llamadas de método y asociación. Cuanto mayor sea la escala del sistema de software, más largo será el ciclo de vida. La interfaz garantiza la flexibilidad y escalabilidad del sistema de software y la capacidad de conexión.

La interfaz ocupa una posición fundamental en la programación Java orientada a objetos. De hecho, una de las tareas más importantes en la etapa de diseño es diseñar las interfaces de cada parte, y luego a través de la combinación de interfaces, se forma la estructura básica del marco del programa.


6. La interfaz se utiliza como tipo. La

interfaz se utiliza como tipo de referencia. Cualquier instancia de una clase que implemente la interfaz se puede almacenar en una variable del tipo de interfaz. A través de estas variables, se puede acceder a los métodos en el interfaz implementada en la clase Tiempo de ejecución de Java El sistema determina dinámicamente qué método en la clase debe usarse, de hecho, llama al método de la clase de implementación correspondiente.

public class Demo{
    public void test1(A a) {
        a.doSth();
    }
    public static void main(String[] args) {
        Demo d = new Demo();
        A a = new B();
        d.test1(a);
    }
}
interface A {
    public int doSth();
}
class B implements A {
    public int doSth() {
        System.out.println("now in B");
        return 123;
    }
}



Supongo que te gusta

Origin blog.csdn.net/michellechouu/article/details/48751033
Recomendado
Clasificación