Java --- herencia, abstracción (super, anular, abstracto)

heredar:

Deje que la relación entre la clase y la clase. Las subclases pueden usar directamente los miembros no privados de la clase principal.

Cuando el contenido repetitivo aparece en muchos tipos, extraiga el contenido repetitivo y conviértalo en una clase principal, de modo que la clase secundaria herede la clase principal.

Beneficios de la herencia:

Reutilización de código mejorada

Mantenibilidad de código mejorada

Deje que la relación entre la clase y la clase sea la premisa del polimorfismo

Desventajas de la herencia:

La herencia es invasiva

Flexibilidad de código reducida

Mejorar el acoplamiento del código.

Características heredadas:

Java solo admite herencia única, no admite herencia múltiple, admite herencia múltiple

Características del acceso a variables miembro heredado:

Acceder a una variable en un método de subclase

Busque el ámbito local de la subclase, busque el ámbito de miembros de la subclase, busque el ámbito de miembros de la clase principal

Nota: Si una variable miembro con el mismo nombre aparece en la clase principal secundaria, a través del principio de proximidad, la clase secundaria se utilizará primero.

Si debe usar la clase principal, puede usar la palabra clave super para distinguir.

El uso de la palabra clave super es similar al uso de esta palabra clave

esto: representa una referencia a esta clase de objeto

super: representa la identidad del espacio de almacenamiento de la clase principal (puede entenderse como una referencia de objeto de la clase principal)

Caso:

public class Test1 {
    
    
    public static void main(String[] args) {
    
    
        Dog d = new Dog();
        d.getName();
    }
}
class SuperAnimal{
    
    
    String name = "SuperAnimal";
    public void getName(){
    
    
        System.out.println(name);
    }
}
class Animal extends SuperAnimal{
    
    
    String name = "小花";
}
class Dog extends Animal{
    
    
    String name = "小黑";
    public void getName(){
    
    
        String name = "小黄";

        System.out.println(name);//局部变量
        System.out.println(this.name);//成员变量
        System.out.println(super.name);//父类成员变量
    }
    
}

运行结果:
小黄
小黑
小花
Método de miembro:

super.method name ()

Anular método: anular

En la relación de herencia aparece el mismo método

La diferencia entre la reescritura de métodos y la sobrecarga:

Anulación de método: anulación

Cuando ocurre en el sistema de herencia, la subclase tiene exactamente los mismos métodos que la clase principal. La relación entre estos dos métodos se denomina "anulación de método"

Características: En las clases para padres e hijos, la vida del método es exactamente la misma

Sobrecarga de método: sobrecarga

Ocurre en la misma clase, hay métodos del "mismo nombre con diferentes parámetros", entonces estos métodos constituyen una sobrecarga de métodos

Nota para la reescritura de métodos:

Los métodos privados en la clase principal no se pueden anular

Método estático de la clase principal, la subclase debe reescribirse mediante un método estático, la clase principal es un método no estático, la subclase debe reescribirse mediante un método no estático

Cuando la subclase anula el método de la clase principal, los permisos de acceso deben ser mayores que los de la clase principal.

Modificador de permisos:

privado: privado, fuera de esta clase, no se puede acceder a otras clases

No escriba nada: solo en el mismo paquete

protegido: acceso a subclases de diferentes paquetes

público: el más poderoso, público, accesible desde cualquier lugar

Características de acceso de los miembros en herencia:

Variables miembro: el principio de proximidad
Método de miembros: principio de proximidad

Características de acceso del método de construcción de subclase

La subclase ejecuta el método de construcción y el método de construcción de la clase principal se ejecuta primero

La subclase ejecuta los parámetros no de la clase padre por defecto, si no hay ningún parámetro, no se ejecutará.

Si la clase principal no tiene parámetros, hay parámetros y desea ejecutar con parámetros

1. La subclase invoca manualmente el método de construcción de parámetros de la clase principal a través de super /// super (parámetro)

2. La subclase llama al método de construcción de esta clase a través de this, y finalmente llama al método de construcción de la clase principal.

public class Test {
    
    
    public static void main(String[] args) {
    
    
        Cat c1 =new Cat();
        c1.setName("加菲");
        c1.setColor("花色");

        Cat c2 = new Cat("英短","黑白");

        System.out.println(c1.getName()+c1.getColor());
        System.out.println(c2.getName()+c2.getColor());
    }
}
class Cat extends Animal{
    
    
    public Cat() {
    
    
    }

    public Cat(String name, String color) {
    
    
        super(name, color);
    }
}
class Animal {
    
    
    String name;
    String color;

    public Animal() {
    
    
    }

    public Animal(String name, String color) {
    
    
        this.name = name;
        this.color = color;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getColor() {
    
    
        return color;
    }

    public void setColor(String color) {
    
    
        this.color = color;
    }
}

Clase abstracta (resumen):

Método abstracto: después de extraer el comportamiento común (método) a la clase principal, se encuentra que la lógica de implementación del método no se puede especificar en Frey, y el método se puede definir como un método abstracto.

Clase abstracta: si hay métodos abstractos en una clase, el nombre de la clase debe declararse como una clase abstracta.

public class TestDemo {
    
    
    public static void main(String[] args) {
    
    
        Cat c = new Cat();
        c.eat();
        
        Dog d = new Dog();
        d.eat();
    }
}
class Cat extends  Animal{
    
    
  public void eat(){
    
    
        System.out.println("猫吃鱼");
    }
}
class Dog extends  Animal{
    
    
    public void eat(){
    
    
        System.out.println("狗吃肉");
    }
}
abstract class  Animal{
    
    
    String name;
    int age;

    public void drink(){
    
    
        System.out.println("喝水");
    }
    //抽象方法特点
    //1.抽象方法没有方法体
    //2.抽象方法所在的类必须是抽象类
    //3.抽象方法的子类必须重写子类的所有抽象方法
    public abstract void eat();
}

Precauciones:

1. No se permite crear instancias de clases abstractas (crear objetos)

2. Existen métodos de construcción en clases abstractas

3. Subclase de la clase abstracta: todos los métodos abstractos de la clase principal deben reescribirse

4. El método en la clase abstracta no puede tener un método abstracto, pero la clase con método abstracto debe ser una clase abstracta

Supongo que te gusta

Origin blog.csdn.net/qq_42073385/article/details/108017849
Recomendado
Clasificación