JavaSE: explicación detallada de clases e interfaces abstractas

ced485cbb11e458d81a746890b32cf3f.gif

Autor: Rukawa Maple Knock Code

Página de inicio del blog: Blog de Rukawa Kaede

Columna: Aprende java conmigo

Cita: Mantente hambriento, mantente tonto

Si quieres hacer cosas buenas, primero debes afilar tus herramientas. Permíteme presentarte una herramienta súper poderosa para ganar ofertas de grandes fabricantes: Niuke.com

Haga clic para registrarse de forma gratuita y aclarar las preguntas conmigo  

Tabla de contenido

1. Clase abstracta

1.1 Entendiendo las clases abstractas

1.2 Resumen de características de las clases abstractas

1.3 Un papel importante de las clases abstractas

2. Interfaz

2.1 ¿Cómo entender la interfaz?

2.2 Uso de la interfaz

2.3 Características de la interfaz

2.4 Implementando múltiples interfaces

2.5 Herencia entre interfaces

3. Clases e interfaces abstractas


1. Clase abstracta

1.1 Entendiendo las clases abstractas

Concepto: Cuando una clase no tiene suficiente información para describir un objeto concreto, la clase es una clase abstracta

Sintaxis: una clase modificada por abstract se llama clase abstracta, y un método modificado por abstract en una clase abstracta se llama método abstracto, y un método abstracto no necesita dar un cuerpo de implementación específico

Formato:

Ejemplo: 

abstract class Shape{
    abstract public void draw();
    abstract void calcArea();
    
    public double getArea(){
        return area;
    }
    protected double area;
}

Un método abstracto no tiene cuerpo.

Las clases abstractas también pueden agregar métodos, propiedades y constructores comunes.

1.2 Resumen de características de las clases abstractas

1. No se puede instanciar una clase abstracta

2. Los métodos abstractos no se pueden modificar de forma privada

3. Los métodos abstractos deben ser heredados por subclases, por lo que no pueden ser modificados por finales y estáticos.

Error: 

Combinación ilegal de modificadores: 'abstract' y 'final' 

Combinación ilegal de modificadores: 'final' y 'abstract'

4. La clase abstracta se debe heredar y la subclase debe anular el método abstracto de la clase principal; de lo contrario, la subclase también es una clase abstracta.

abstract class Shape{
    abstract public void draw();
    abstract void calcArea();

    public double getArea(){
        return area;
    }
    protected double area;
}
class Circle extends Shape{
    private double r;
    final private static double PI = 3.14;

    public Circle(double r) {
        this.r = r;
    }

    @Override
    public void draw() {
        System.out.println("圆形:r"+r);
    }

    @Override
    void calcArea() {
        area = PI*r*r;
    }
    @Override
    public double getArea() {
        return super.getArea();
    }
}

5. Las clases abstractas no necesariamente contienen métodos abstractos, y las clases con métodos abstractos deben ser clases abstractas.

6. Puede haber un constructor en la clase abstracta para que la subclase inicialice las variables miembro de la clase principal al crear un objeto.

1.3 Un papel importante de las clases abstractas

Después de heredar una clase, si es una clase común, no informará un error sin anular el método. Si hereda una clase abstracta, informará un error sin anular el método de la clase principal. Usando la verificación del compilador, es muy útil en el desarrollo real significado

2. Interfaz

2.1 ¿Cómo entender la interfaz?

Una interfaz es un estándar público de comportamiento, cuando se implementa, siempre que se ajuste al estándar, se puede usar universalmente.

USB, tomas de corriente, etc. de productos electrónicos

En Java, una interfaz puede verse como: una especificación común de varias clases, un tipo de datos de referencia

 gramática:

La definición de una interfaz es básicamente la misma que la de una clase, palabra clave: interfaz

1. Al crear una interfaz, el nombre de la interfaz generalmente comienza con una letra mayúscula I

2. El nombre de la interfaz generalmente usa la palabra "adjetivo" como parte del discurso

public interface Inter {
       //抽像方法
        void method();
}

2.2 Uso de la interfaz

La interfaz no se puede usar directamente, debe definir una clase concreta para implementar todos los métodos abstractos en la interfaz

palabra clave: implementos

Nota: existe una relación de herencia de extensiones entre subclases y clases principales, y una relación de implementación de implementos entre clases e interfaces.

Formato:

public class 类名称 implements 接口名称 {
        //...
}

2.3 Características de la interfaz

1. El tipo de interfaz no se puede instanciar directamente, es el nuevo objeto

2. Los métodos en la interfaz se designarán implícitamente como resumen público y otros modificadores informarán errores.

 3. Los métodos en la interfaz son implementados por la clase que implementa la interfaz

 4. Al reescribir los métodos en la interfaz, no puede usar la modificación de permiso de acceso predeterminada

Error: 'openDevice()' en 'A' entra en conflicto con 'openDevice()' en 'USB'; intenta asignar un acceso más débil ('paquete-privado'); 'público'

5. Las variables en la interfaz se designarán implícitamente como variables finales estáticas públicas

6. Las interfaces no pueden tener bloques de código y constructores estáticos

7. Después de compilar la interfaz, el formato de sufijo del archivo de bytecode es .class

8. La clase debe implementar todos los métodos abstractos en la interfaz; de lo contrario, la clase debe configurarse como una clase abstracta.

 Error: la clase 'A' debe declararse abstracta o implementar el método abstracto 'USB()' en 'USB'

2.4 Implementando múltiples interfaces

La herencia es herencia simple, pero una clase puede implementar múltiples interfaces

Vea un ejemplo:

public class Test {
    public static void main(String[] args) {
        dragon drag = new dragon("dragon");
        drag.fly();
        drag.swim();
    }

}

//定义一个动物类
class Animal{
    protected String name;

    public Animal(String name){
        this.name = name;
    }
}
//定义接口

interface IFlying{
    void fly();
}

interface ISwimming{
    void swim();
}
//定义鸟类

class Bird extends Animal implements IFlying{
    public Bird(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(name+"正在用翅膀飞");
    }
}
//定义鱼类

class Fish extends Animal implements ISwimming {
    public Fish(String name) {
        super(name);
    }

    @Override
    public void swim() {
        System.out.println(name+"正在用尾巴游");
    }
}
//定义龙类

class dragon extends Animal implements ISwimming,IFlying{
    public dragon(String name) {
        super(name);
    }

    @Override
    public void fly() {
        System.out.println(name+"正在腾云驾雾");
    }

    @Override
    public void swim() {
        System.out.println(name+"正在海里游");
    }
}

 Nota: si una clase implementa múltiples interfaces, debe implementar todos los métodos abstractos; de lo contrario, debe establecerse en una clase abstracta.

2.5 Herencia entre interfaces

Las clases y las clases son de herencia única, y las interfaces pueden ser de herencia múltiple

palabra clave: extiende

interface IAmphibious extends IFlying,ISwimming{
    @Override
    void fly();
    @Override
    void swim();
}
class dragon1 extends Animal implements IAmphibious{

    public dragon1(String name) {
        super(name);
    }
    @Override
    public void fly() {
        //...
    }
    @Override
    public void swim() {
        //...
    }
}

Nota: la herencia entre interfaces es equivalente a fusionar múltiples interfaces

3. Clases e interfaces abstractas

Diferencia principal : una clase abstracta puede contener métodos y campos comunes, dichos métodos y campos comunes pueden ser utilizados directamente por las subclases (sin anularlos), mientras que las interfaces no pueden contener métodos comunes y las subclases deben anular todos los métodos abstractos.

La existencia de clases abstractas es para permitir que el compilador verifique mejor❌

Diferencia de sintaxis:

1. Las variables miembro de una clase abstracta son ilimitadas, y las variables miembro en la interfaz solo pueden ser de tipo final estático público

2. Las clases abstractas pueden proporcionar detalles de implementación de los métodos miembros, y solo los métodos abstractos públicos pueden existir en las interfaces.

3. Las clases abstractas pueden tener bloques de código estático y métodos estáticos, y las interfaces no pueden contener bloques de código estático y métodos estáticos.

4. Una clase solo puede heredar una clase abstracta, pero una clase puede implementar múltiples interfaces

"El intercambio de este problema está aquí, recuerda darle al blogger un enlace de tres, ¡tu apoyo es la mayor fuerza impulsora para mi creación!

ced485cbb11e458d81a746890b32cf3f.gif

 

Supongo que te gusta

Origin blog.csdn.net/chenchenchencl/article/details/126244071
Recomendado
Clasificación