java的抽象类是什么

抽象类

  • 抽象类
    1、在java中 abstract 是抽象的意思,可以修饰类、成员方法
    2、abstract 修饰类,这个类是抽象类;abstract 修饰方法,这个方法就是抽象方法
    tips:抽象方法 之后方法签名,不能声明方法体
public abstract class Animal{
    
    
	public abstract void run();
}
  • 抽象类的使用场景
    1、抽象类可以理解为不完成的设计图,一般作为父类,让之类继承
    2、当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成,此时这个类就可以声明成抽象类

  • 抽象类的特征
    1、类有的成员 (成员变量、方法、构造器),抽象类也都具备
    2、抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
    3、一个类继承了抽象类,必须重写抽象类的全部抽象方法,否则这个类也必须定义成抽象类
    4、不能用abstract 修饰变量、代码块、构造器

  • final 和 abstract 是什么关系
    1、是互斥的关系
    2、abstract 定义的抽象类作为模版让子类继承,final 定义的类不能被继承
    3、抽象方法定义通用功能,让之类重写,final 定义的方法不能被重写

  • 实例

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);

    }

}

输出结果:

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

猜你喜欢

转载自blog.csdn.net/qq_15283475/article/details/130132783
今日推荐