Descripción de la interfaz
especificación de la interfaz es una clase común múltiplo.
La interfaz es un tipo de datos, es uno de los elementos más importantes de referencia: los métodos abstractos .
¿Cómo definir el formato de una interfaz:
public interface 接口名称 {
// 接口内容
}
NOTA: Después de sustituir la palabra clave interface, el compilador genera un archivo de código de bytes sigue siendo: .java -> .class.
Si Java 7, a continuación, el contenido de la interfaz que se pueden incluir son:
- constante
- método abstracto
Si Java 8, adicionalmente puede contener:
- El método por defecto
- método estático
Si Java 9, puede contener adicionalmente:
- Los métodos privados
interfaz Paso
- La interfaz no se puede utilizar directamente, tiene que haber una "clase de implementación" a "aplicar" la interfaz.
Formato:
implementa la clase pública el nombre de interfaz nombre de clase de implementación {
// ...
} - Clase que implementa la interfaz debe sobrescribir (implementado) toda la interfaz de métodos abstracto.
Implementación: eliminar la palabra clave abstracta, además de los apoyos del cuerpo método. - Crear una clase de implementación objeto, utilice.
Nota :
Si la clase no implementa todos los métodos abstractos de la interfaz, entonces la clase de implementación sobrescribe y que deben ser clase abstracta.
métodos de interfaz Abstract
/*
在任何版本的Java中,接口都能定义抽象方法。
格式:
public abstract 返回值类型 方法名称(参数列表);
注意事项:
1. 接口当中的抽象方法,修饰符必须是两个固定的关键字:public abstract
2. 这两个关键字修饰符,可以选择性地省略。(今天刚学,所以不推荐。)
3. 方法的三要素,可以随意定义。
*/
public interface MyInterfaceAbstract {
// 这是一个抽象方法
public abstract void methodAbs1();
// 这也是抽象方法
abstract void methodAbs2();
// 这也是抽象方法
public void methodAbs3();
// 这也是抽象方法
void methodAbs4();
}
método predeterminado de la interfaz
- El método de interfaz predeterminada, se puede interconectar objeto de clase, llamada directamente.
- El método por defecto de la interfaz, la interfaz también se puede implementar clases de sobreescritura.
A partir de Java 8, donde la interfaz le permite definir el método por defecto.
formato:
public default 返回值类型 方法名称(参数列表) {
方法体
}
public interface MyInterfaceDefault {
// 抽象方法
public abstract void methodAbs();
// 新添加了一个抽象方法
// public abstract void methodAbs2();
// 新添加的方法,改成默认方法
public default void methodDefault() {
System.out.println("这是新添加的默认方法");
}
}
NOTA: El método de interfaz por defecto que puede resolver el problema de las mejoras de interfaz.
interfaz Método estático
Nota: El objeto no se puede lograr a través de la clase de interfaz con el método estático entre las llamadas de interfaz.
DERECHA: El nombre de la interfaz llamando directamente el método estático de ellos.
Formato:
Nombre de la interfaz de un nombre de método estático (parámetro) ;.
/*
从Java 8开始,接口当中允许定义静态方法。
格式:
public static 返回值类型 方法名称(参数列表) {
方法体
}
提示:就是将abstract或者default换成static即可,带上方法体。
*/
public interface MyInterfaceStatic {
public static void methodStatic() {
System.out.println("这是接口的静态方法!");
}
}
métodos de interfaz privadas:
métodos privados ordinarios y métodos estáticos privados
/*
问题描述:
我们需要抽取一个共有方法,用来解决两个默认方法之间重复代码的问题。
但是这个共有方法不应该让实现类使用,应该是私有化的。
解决方案:
从Java 9开始,接口当中允许定义私有方法。
1. 普通私有方法,解决多个默认方法之间重复代码问题
格式:
private 返回值类型 方法名称(参数列表) {
方法体
}
2. 静态私有方法,解决多个静态方法之间重复代码问题
格式:
private static 返回值类型 方法名称(参数列表) {
方法体
}
*/
public interface MyInterfacePrivateA {
public default void methodDefault1() {
System.out.println("默认方法1");
methodCommon();
}
public default void methodDefault2() {
System.out.println("默认方法2");
methodCommon();
}
private void methodCommon() {
System.out.println("AAA");
System.out.println("BBB");
System.out.println("CCC");
}
}
Interfaz constante
/*
接口当中也可以定义“成员变量”,但是必须使用public static final三个关键字进行修饰。
从效果上看,这其实就是接口的【常量】。
格式:
public static final 数据类型 常量名称 = 数据值;
备注:
一旦使用final关键字进行修饰,说明不可改变。
注意事项:
1. 接口当中的常量,可以省略public static final,注意:不写也照样是这样。
2. 接口当中的常量,必须进行赋值;不能不赋值。
3. 接口中常量的名称,使用完全大写的字母,用下划线进行分隔。(推荐命名规则)
*/
public interface MyInterfaceConst {
// 这其实就是一个常量,一旦赋值,不可以修改
public static final int NUM_OF_MY_CLASS = 12;
}
Observe el uso de la interfaz
- La interfaz no es un bloque estático de código o método de construcción.
- Una clase padre directa es único, sino una clase puede implementar múltiples interfaces simultáneamente.
Formato:
MyInterfaceImpl clase pública los implementos MyInterfaceA, MyInterfaceB {
// cubre todos los métodos abstractos de anulación
} - Si, existen múltiples interfaces entre los instrumentos de la clase métodos abstractos repetidos, entonces sólo sobrescrito una vez.
- Si la aplicación no cubre todos los métodos abstractos entre todas las interfaces de reescribir la clase, la clase de implementación debe ser una clase abstracta.
- Si la clase traba para múltiples interfaces entre método predeterminado duplicado, a continuación, la clase debe ser implementado para sobrescribir el método predeterminado de conflicto.
- Si un método de clase entre la matriz directa, y el método predeterminado de generar una interfaz entre un conflicto entre la clase padre con prioridad.
Las clases, las cuestiones de aplicación de herencia y de interfaz
- Entre las clases es una herencia simple. Sólo una clase padre directa.
- Entre las clases y las interfaces se implementan múltiples. Una clase puede implementar múltiples interfaces.
- Entre la interfaz y la interfaz es la herencia múltiple.
precauciones:
- método abstracto, si una interfaz entre una pluralidad de padres repite, no importa.
- Las interfaces método predeterminado entre múltiples padres si se repite, a continuación, el sub-interfaz debe reemplazar el método por defecto de reescritura, [y] con la palabra clave predeterminada.