Conocimientos que debes conocer en herencia y polimorfismo

Programación orientada a objetos

1. Herencia:

A veces hay algunas asociaciones entre cosas objetivas, luego también habrá algunas asociaciones cuando se expresen como clases y objetos.
Por ejemplo, un gato es un animal y tiene los atributos básicos de un animal. Cuando definimos la clase de gato, no es necesario volver a definir algunos de los atributos de los animales, simplemente dejemos que la clase de gato herede la clase de animal.
(La reutilización de código reduce la redundancia de código)

1. Forma de expresión: A se extiende B
A: subclase, clase derivada
B: clase principal, clase base, superclase

2. ¿Qué hereda la subclase de la clase padre? (Entrevista BAT) ¡
Todo excepto el método de construcción! ! !
(La subclase necesita ayudar al método de construcción de la clase principal, es decir, acceder al método de construcción de la clase principal)

3. ¿La diferencia entre esta y las súper palabras clave? (Entrevista)
(1) Esto representa la referencia del objeto actual
https://blog.csdn.net/qq_45658339/article/details/108900917
super representa la referencia de la clase principal
(2)
Inserte la descripción de la imagen aquí

4. Palabra clave protegida:
descubrimos que si el campo se establece en privado, no se puede acceder a la subclase. Pero establecerlo en público viola nuestra intención original de "encapsulación", por lo que introdujimos la palabra clave protegida

Hay cuatro derechos de acceso para campos y métodos en Java:
(1) privado: acceso dentro de la clase, pero no fuera de la clase (privado)
(2) predeterminado (también llamado acceso al paquete predeterminado): acceso dentro de la clase, el mismo Se puede acceder a las clases del paquete, no se puede acceder a otras clases
(3) protegido: se puede acceder a la clase, se puede acceder a las subclases y clases del mismo paquete, no se puede acceder a otras clases (protegido)
(4) público: clase interna Y las personas que llaman a la clase pueden acceder (público)
Inserte la descripción de la imagen aquí

5. ¿La diferencia entre reescribir y recargar? (Entrevista)
https://blog.csdn.net/qq_45658339/article/details/108822052

6. El uso de final:
(1) final puede modificar variables (convertirse en constantes ), y solo se puede inicializar una vez
final int SIZE = 10;
(2) final puede modificar clases , lo que significa que la clase actual no se puede heredar (clase final Animal)
(3 ) ) Final puede modificar el método , el método actualmente modificado no se puede anular

2. Polimorfismo:

Polimorfismo: en realidad una especie de pensamiento

Desde el nivel de código: la clase principal se refiere al objeto de la subclase, y la clase principal y la subclase tienen el método de anulación del mismo nombre (anulación). Cuando se invoca el método de anulación del mismo nombre a través de la referencia de la clase principal, puede mostrar Diferentes comportamientos, el proceso de mostrar comportamientos tan diferentes, este tipo de pensamiento se llama polimorfismo.

Conocimiento previo:
Inserte la descripción de la imagen aquí

Up-casting : referencia de la clase principal, referencia al objeto de la subclase
① asignación directa ② paso de parámetro del método ③ valor de retorno

Enlace dinámico :
1. La referencia de la clase principal, se refiere al objeto de la subclase (upcast)
2. A través de la referencia de la clase principal, llame al método reescrito por la subclase y la clase principal
(el método de construcción también se vinculará dinámicamente)

Ejemplos de polimorfismo:

class Shape {
    
    
    public void draw() {
    
    
    }
}
class Cycle extends Shape {
    
    
    @Override
    public void draw() {
    
    
        System.out.println("画一个⚪圈!");
    }
}
class Rect extends Shape {
    
    
    @Override
    public void draw() {
    
    
        System.out.println("画一个♦");
    }
}

public class oo2 {
    
    
    public static void drawMap(Shape shape) {
    
    
        shape.draw(); //多态的核心
    }

    public static void main(String[] args) {
    
    
        Shape shape1 = new Cycle();
        Shape shape2 = new Rect();
        drawMap(shape1);
        drawMap(shape2);
    }
}

resultado de la operación:
Inserte la descripción de la imagen aquí

Beneficios de usar polimorfismo:

1. El costo de usar la clase por parte de los llamantes de la clase se reduce aún más. La
encapsulación significa que el llamador de la clase no necesita conocer los detalles de implementación de la clase. El polimorfismo permite que el llamador de la clase ni siquiera sepa cuál es el tipo de clase, pero solo necesita saber Este objeto puede tener un método determinado.
Por lo tanto, el polimorfismo puede entenderse como un paso más de encapsulación, lo que permite a los llamadores de clase reducir el costo de usar la clase

2. Puede reducir la "ciclocomplejidad" del código y evitar el uso de una gran cantidad de if-else
(ciclocomplejidad: el número de ocurrencias de declaraciones condicionales y declaraciones de bucle en un fragmento de código )

3. Mayor escalabilidad

Supongo que te gusta

Origin blog.csdn.net/qq_45658339/article/details/109008486
Recomendado
Clasificación