¿Qué es una clase abstracta en Java?

clase abstracta

  • Clase abstracta
    1. En Java, abstracto significa abstracto, que se puede utilizar para modificar clases y métodos miembro
    2. Clases abstractas modificadas, esta clase es una clase abstracta, métodos abstractos modificados, este método es un método abstracto
    consejos: La firma del método después de que el método abstracto no se pueda declarar cuerpo del método
public abstract class Animal{
    
    
	public abstract void run();
}
  • Escenarios para el uso de clases abstractas
    1. Las clases abstractas pueden entenderse como dibujos de diseño incompletos. Generalmente, se usan como clases principales para permitir que las clases hereden. 2.
    Cuando la clase principal sabe que la subclase debe completar ciertos comportamientos, pero cada subclase implementa el comportamiento es diferente, por lo que la clase principal define el comportamiento como un método abstracto, y la implementación específica se entrega a la subclase para que la complete.En este momento, la clase se puede declarar como una clase abstracta

  • Características de las clases abstractas
    1. La clase tiene miembros (variables miembro, métodos, constructores) y las clases abstractas también los tienen
    2. Las clases abstractas no necesariamente tienen métodos abstractos Una clase con métodos abstractos debe ser una clase abstracta
    3. Una clase hereda Una clase abstracta debe reescribir todos los métodos abstractos de la clase abstracta; de lo contrario, esta clase también debe definirse como una clase abstracta
    4. No puede usar abstract para modificar variables, bloques de código y constructores.

  • ¿Cuál es la relación entre final y abstract?
    1. Es una relación mutuamente excluyente. 2. La clase abstracta definida por abstract se usa
    como plantilla para que las subclases hereden, y la clase definida por final no se puede heredar.

  • ejemplo

public abstract class AbstractTemplate <T> {
    
    
    protected void validateParam(T request) {
    
    
        Out.out("father validateParam: " + request.toString());
    }

    public abstract void doExecute(T req) throws Exception;  //抽象方法

    public void execute(T req) {
    
    
        try {
    
    
            //1.参数校验
            validateParam(req);

            //2.执行业务逻辑
             doExecute(req);
        } catch (Exception e) {
    
    
            // 未知异常处理
            Out.out(e);
        }
    }


    public static void main(String[] args) {
    
    
        AbstractTemplate <String>  templateStr = new AbstractTemplate<String>() {
    
    
            @Override  //重写父类的方法
            public void validateParam(String str){
    
    
                super.validateParam(str);
                Out.out("child validateParam: " + str);
            }


            @Override //重写抽象方法
            public void doExecute(String req) throws Exception {
    
    
                Out.out("child doExecute");
            }
        };

        templateStr.execute("ziyuan");

        AbstractTemplate<Integer>  templateInt = new AbstractTemplate<Integer>() {
    
    

            @Override  //重写父类的方法
            public void validateParam(Integer num){
    
    
                super.validateParam(num);
                Out.out("child validateParam: " + num);
            }


            @Override //抽象方法
            public void doExecute(Integer num) throws Exception {
    
    
                Out.out("child doExecute");
            }
        };
        templateInt.execute(8);

    }

}

Resultado de salida:

ziyuan 2023 2023-04-13 16:23:44 father validateParam: ziyuan
ziyuan 2023 2023-04-13 16:23:44 child validateParam: ziyuan
ziyuan 2023 2023-04-13 16:23:44 child doExecute
ziyuan 2023 2023-04-13 16:23:44 father validateParam: 8
ziyuan 2023 2023-04-13 16:23:44 child validateParam: 8
ziyuan 2023 2023-04-13 16:23:44 child doExecute

Supongo que te gusta

Origin blog.csdn.net/qq_15283475/article/details/130132783
Recomendado
Clasificación