1. Interfaces
1.1 Resumen de interfaces
Una interfaz es un conjunto de funciones; también puede considerarse un tipo de datos, y es más abstracta que una clase abstracta.Clase 。
La interfaz solo describe los métodos que debe tener, sin una implementación concreta; la implementación concreta la realiza la clase de implementación de la interfaz (equivalente a una subclase de la interfaz). Esto separa la definición de la funcionalidad de su implementación, optimizando el diseño del programa.
1.2 Formato y uso de las interfaces
1.2.1 Formato de la interfaz
A diferencia de la definición de una clase `class`,classal definir una interfaz, se necesita usarinterfacela palabra clave `interface`.
La definición de una interfaz todavía se encuentra en un archivo `.java`.java; aunque al declararla se usainterfacela palabra clave `interface`, después de compilar aún se genera un.classarchivo `.class`. Esto nos permite considerar la interfaz como un tipo especial de clase que solo contiene declaraciones de funcionalidades.
Formato de definición:public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
1.2.2 Uso de la interfaz
Todos los métodos en una interfaz son métodos abstractos. No tiene sentido usar `new` directamente sobre una interfaz para invocar métodos, y Java no lo permite.
La relación entre una clase y una interfaz es de implementación, es decir, la clase implementa la interfaz. La acción de implementar es similar a la herencia, solo que la palabra clave es diferente; para implementar se usa `implements`.implements。
Después de que otra clase (clase de implementación) implementa la interfaz, equivale a declarar:Debo tener las funcionalidades de esta interfaz.La clase de implementación aún necesita sobrescribir los métodos para implementar la funcionalidad concreta.
Formato:
class 类 implements 接口 {
重写接口中方法
}
Después de que una clase implementa una interfaz, hereda los métodos abstractos de la interfaz; en ese momento, la clase debe sobrescribir estos métodos abstractos para completar la lógica concreta.
1.2.3 Código de ejemplo 1
Ejemplo
1.3 Características de los miembros en una interfaz
-
1. En una interfaz se pueden definir variables, pero deben estar modificadas con modificadores fijos: `public static final`. Por lo tanto, las variables en una interfaz también se denominan constantes y su valor no se puede cambiar. Más adelante explicaremos la palabra clave `final`.
-
2. En una interfaz se pueden definir métodos, y los métodos también tienen modificadores fijos: `public abstract`.
-
3. No se pueden crear objetos a partir de una interfaz.
-
4. Solo después de que la subclase sobrescriba todos los métodos abstractos de la interfaz, la subclase puede ser instanciada. De lo contrario, la subclase es una clase abstracta.
1.3.1 Código de ejemplo 2
Ejemplo
1.4 Relación entre interfaces y clases
- A: Entre clases: relación de herencia. Una clase solo puede heredar directamente de una clase padre, pero admite herencia múltiple.
- B: Entre clases e interfaces: solo existe relación de implementación; una clase puede implementar múltiples interfaces.
- C: Entre interfaces: solo existe relación de herencia; una interfaz puede heredar múltiples interfaces.
1.4.1 Código de ejemplo 3
Ejemplo
1.5 La idea de las interfaces
Hemos aprendido la representación en código de las interfaces; ahora vamos a estudiar la idea de las interfaces. A continuación, lo explicaremos con ejemplos de la vida cotidiana.
Ejemplo:Todos sabemos que la computadora tiene muchos puertos, y en estos puertos se pueden conectar los dispositivos correspondientes. ¿Por qué estos dispositivos se pueden conectar? La razón principal es que estos dispositivos, al fabricarse, cumplen con las reglas de uso del puerto; de lo contrario, no podrían insertarse en la interfaz ni mucho menos usarse. La aparición de estos puertos nos permite usar más dispositivos.
La aparición de las interfaces facilita el uso y el mantenimiento posteriores. Por un lado, se usa la interfaz (como la computadora); por otro lado, se implementa la interfaz (los dispositivos que se conectan al puerto). Por ejemplo: el portátil usa esta regla (interfaz) y los periféricos de la computadora implementan esta regla (interfaz).
En el marco de las colecciones se utilizan muchas interfaces:
Collection 接口
List 接口
ArrayList 实现类
LinkedList 实现类
Set 接口
1.6 Ventajas de las interfaces
- 1. La relación entre clases e interfaces es de implementación, y es una implementación múltiple; una clase puede implementar múltiples interfaces. Entre clases, la relación es de herencia; en Java, la herencia es única, una clase solo puede tener una clase padre, lo que rompe la limitación de la herencia.
- 2. Proporciona reglas al exterior (interfaz USB).
- 3. Reduce el acoplamiento del programa (permite el desarrollo modular: define las reglas, cada persona implementa su propio módulo, mejorando la eficiencia del desarrollo).
1.7 Diferencias entre interfaces y clases abstractas
1. Puntos en común:Extraer continuamente métodos abstractos sin implementación concreta; ambas no pueden ser instanciadas (no se pueden crear objetos).
2. Diferencias
1: Relación con las clases
(1) La clase y la interfaz tienen una relación de implementación, y es una implementación múltiple; una clase puede implementar múltiples interfaces. La clase y la clase abstracta tienen una relación de herencia; en Java, la herencia es única y de múltiples niveles; una clase solo puede heredar de una clase padre, pero puede tener una clase "abuelo".
(2) Diferencia 2: Miembros
a.成员变量 抽象类可以有成员变量,也可以有常量 接口只能有常量,默认修饰符public static final b.成员方法 抽象类可以有抽象方法,也可以有非抽象方法 接口只能有抽象方法,默认修饰符 public abstract c.构造方法 抽象类有构造方法,为子类提供 接口没有构造方法
1.8 Caso de atletas

1.8.1 Código de ejemplo 4
Ejemplo
2. Polimorfismo
2.1 Resumen del polimorfismo
El polimorfismo es la tercera gran característica de la orientación a objetos, después del encapsulamiento y la herencia.
Las cosas reales a menudo presentan múltiples formas. Por ejemplo, un estudiante es un tipo de persona; entonces un compañero concreto, Zhang San, es a la vez estudiante y persona, es decir, presenta dos formas.
Java, como lenguaje orientado a objetos, también puede describir múltiples formas de una cosa. Por ejemplo, la clase `Student` hereda de `Person`; un objeto de `Student` es tanto `Student` como `Person`.
2.2 Definición y formato de uso del polimorfismo
Formato de definición del polimorfismo: en realidad, es que una variable de referencia de la clase padre apunta a un objeto de la subclase.
父类类型 变量名 = new 子类类型(); 变量名.方法名();
A: Formato de definición de polimorfismo con clases normales
父类 变量名 = new 子类();
Por ejemplo:
class Fu {}
class Zi extends Fu {}
//类的多态使用
Fu f = new Zi();
B: Formato de definición de polimorfismo con clases abstractas
抽象类 变量名 = new 抽象类子类();
Por ejemplo:
abstract class Fu {
public abstract void method();
}
class Zi extends Fu {
public void method(){
System.out.println(“重写父类抽象方法”);
}
}
//类的多态使用
Fu fu= new Zi();
C: Formato de definición de polimorfismo con interfaces
接口 变量名 = new 接口实现类();
Por ejemplo:
interface Fu {
public abstract void method();
}
class Zi implements Fu {
public void method(){
System.out.println(“重写接口抽象方法”);
}
}
//接口的多态使用
Fu fu = new Zi();
2.2.1 Código de caso
Ejemplo
2.3 Características de los miembros polimórficos
A: Variables miembro del polimorfismo
Cuando aparece una variable miembro con el mismo nombre en la clase padre e hija, al invocarla con polimorfismo:
- En tiempo de compilación: se consulta si la clase a la que pertenece la variable de tipo referencia contiene la variable miembro invocada. Si no la tiene, la compilación falla.
- En tiempo de ejecución: también se invoca la variable miembro de la clase a la que pertenece la variable de tipo referencia.
Regla sencilla: tanto la compilación como la ejecución se basan en el lado izquierdo del signo igual. Compilación y ejecución miran a la izquierda.
B: Métodos miembro del polimorfismo
- En tiempo de compilación: se consulta la clase a la que pertenece la variable de referencia. Si la clase no tiene el método invocado, la compilación falla.
- En tiempo de ejecución: se consulta la clase del objeto al que apunta la variable de referencia y se ejecuta el método miembro de la clase a la que pertenece el objeto.
En resumen: la compilación mira a la izquierda, la ejecución mira a la derecha.
2.3.1 Código de caso seis
Ejemplo
2.4 Upcasting y downcasting en el polimorfismo
La transformación en el polimorfismo se divide en dos tipos: upcasting y downcasting.
A: Upcasting: cuando un objeto de subclase se asigna a una referencia de clase padre, se produce upcasting; el polimorfismo en sí es un proceso de upcasting.
Formato de uso:
父类类型 变量名 = new 子类类型();
Por ejemplo:
Person p = new Student();
B: Downcasting: un objeto de subclase que ya ha sufrido upcasting puede usar el formato de conversión de tipos forzada para convertir la referencia de clase padre en una referencia de subclase; este proceso es downcasting. Si se crea directamente un objeto de clase padre, no se puede realizar downcasting.
Formato de uso:
TipoSubclase nombreVariable = (TipoSubclase) variableDeTipoPadre;
Por ejemplo:
Student stu = (Student) p; // 变量p 实际上指向 Student 对象
Ejemplo
2.5 Ventajas y desventajas del polimorfismo
Ejemplo
Dirección original: https://www.cnblogs.com/yoke/p/7453864.html