Interfaz de aprendizaje de Java

Interfaz de aprendizaje de Java

Visión general

Como todos sabemos, somos hijos de nuestros padres. Hemos heredado tanto los genes de nuestro padre como los de nuestra madre. Esta es una herencia múltiple.

Sin embargo, en los programas Java, no se admite la herencia múltiple. Java solo admite herencia única. ¡Pero la interfaz nos brinda la posibilidad de implementar herencia múltiple!

Interfaz (Inglés: Interfaz): En el lenguaje de programación JAVA, la interfaz es un tipo abstracto, es una colección de métodos abstractos, interfaces generalmente interfacedeclaradas. Una clase hereda los métodos abstractos de la interfaz heredando la interfaz.

Tenemos que dejar claro que ** ¡las interfaces no son clases! ¡La interfaz y la clase son una estructura lado a lado! ** Es solo que la forma de escribir interfaces es muy similar a las clases, pero pertenecen a conceptos diferentes. La clase describe las propiedades y métodos del objeto. La interfaz contiene los métodos que implementará la clase.

A menos que la clase que implementa la interfaz sea una clase abstracta, la clase debe definir todos los métodos en la interfaz.

No se puede crear una instancia de la interfaz, pero se puede implementar. Una clase que implementa una interfaz debe implementar todos los métodos descritos en la interfaz; de lo contrario, debe declararse como una clase abstracta. Además, en Java, los tipos de interfaz se pueden usar para declarar una variable, pueden convertirse en un puntero nulo o estar vinculados a un objeto implementado por esta interfaz.

1. La definición e implementación de la interfaz

Antes de JDK7, solo las constantes globales y los métodos abstractos se pueden definir en las interfaces; después de JDK8, además de las constantes globales y los métodos abstractos, también se pueden definir en las interfaces métodos estáticos, métodos predeterminados, etc.

La clase que implementa la interfaz debe implementar todos los métodos abstractos de la interfaz, mientras que los métodos estáticos y los métodos predeterminados no necesitan implementarse. Los métodos estáticos y los métodos predeterminados en la interfaz solo se pueden llamar a través de la interfaz.

// 定义一个接口
interface Flyable {
    
    
    // 全局常量
    // 两种方式效果相同,一般书写时省略前面的 public static final
    public static final int MAX_SPEED = 7900;
    int MIN_SPEED = 0;

    // 抽象方法
    // 两种方式效果相同,一般书写时省略前面的 public abstract
    public abstract void fly();
    void stop();
}

class Bird implements Flyable {
    
    
    @Override
    public void fly() {
    
    
        System.out.println("I can fly.");
    }

    @Override
    public void stop() {
    
    
    }
}

En segundo lugar, la herencia de la interfaz

Una interfaz puede heredar otra interfaz, que es similar a la forma de herencia entre clases. La herencia de la interfaz utiliza la palabra clave extensions, y la interfaz secundaria hereda el método de la interfaz principal.

La clase implementada debe implementar todas las interfaces (incluidas las heredadas por las interfaces) antes de que se pueda instanciar.

Herencia única

// 定义一个接口
interface Flyable {
    
    
    public abstract void fly();
    void stop();
}

// 继承一个接口
interface Bird extends Flyable {
    
    
    void eatBug();
}

// 实现接口
class Sparrow implements Bird {
    
    
    @Override
    public void fly() {
    
    
    }

    @Override
    public void stop() {
    
    
    }

    @Override
    public void eatBug() {
    
    
    }
}

Herencia múltiple

En Java, la herencia múltiple de clases es ilegal, pero las interfaces permiten la herencia múltiple. En la herencia múltiple de la interfaz, la palabra clave extiende solo debe usarse una vez, seguida de la interfaz heredada para lograr la herencia múltiple.

A través de la herencia múltiple de interfaces, se puede realizar una herencia múltiple de clases.

// 定义一个接口
interface Flyable {
    
    
    void fly();
}

interface Reproduction {
    
    
    void breedingOffspring();
}

// 继承一个接口
interface Bird extends Flyable, Reproduction {
    
    
    void eatBug();
}

// 实现接口
class Sparrow implements Bird {
    
    
    @Override
    public void fly() {
    
    
    }

    @Override
    public void eatBug() {
    
    
    }

    @Override
    public void breedingOffspring() {
    
    
    }
}

Tres, marca la interfaz

La interfaz de etiqueta a veces se denomina interfaz de etiqueta (interfaz de etiqueta), es decir, la interfaz no contiene ningún método.

Los ejemplos son interfaces etiquetadas fáciles de encontrar en Java, como el JDK, Serializablela interfaz es una interfaz de marcador.

Una interfaz marcada es una interfaz sin métodos ni atributos, solo indica que su clase pertenece a un tipo específico, para que otros códigos prueben y permitan hacer algo.

Función de interfaz de marcado: En términos simples, es marcar un objeto (sello) para que el objeto tenga ciertos privilegios o privilegios.

public interface Flyable {
    
    
    
}

Cuarto, la comparación de interfaces y clases.

  • La interfaz no se puede utilizar para crear instancias de objetos, los objetos sí;
  • La interfaz no tiene constructor, la clase tiene constructor
  • Todos los métodos de la interfaz deben ser métodos abstractos y todos los métodos de la clase no pueden ser métodos abstractos;
  • La interfaz no puede contener variables miembro, excepto para variables estáticas y finales, la clase puede tener variables miembro;
  • La interfaz no es heredada por la clase, pero debe ser implementada por la clase;
  • La interfaz admite herencia múltiple y la clase solo admite herencia única.

Cinco, conflicto de método predeterminado de interfaz

Si primero define un método como método predeterminado en una interfaz y luego define el mismo método en una superclase u otra interfaz, se producirá un error de ambigüedad.

Para resolver este problema, Java tiene las siguientes reglas.

  1. ** Superclase primero: ** Si la superclase proporciona un método específico, se ignorará el método predeterminado con el mismo nombre y los mismos parámetros;
  2. ** Conflicto de interfaz: ** Si una interfaz proporciona un método predeterminado, otra interfaz proporciona un método con el mismo nombre y el mismo tipo de parámetro. La clase de implementación debe anular este método para resolver el conflicto.

Supongo que te gusta

Origin blog.csdn.net/qq_43580193/article/details/112636740
Recomendado
Clasificación