• Java抽象类(abstract)


    抽象类

    当父类的某些方法,需要声明,但是又不确定如何实现时,可以将其声明为抽象方法,那么这个类就是抽象类

    1)用abstract关键字来修饰一个类时,这个类就叫抽象类

    访问修饰符 abstract 类名 {}
    
    • 1

    2)用abstract关键宇来修饰一个方法时,这个方法就是抽象方法

    访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体
    
    • 1

    3)抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现

    4)抽象类,是考官比较爱问的知识点,在框架和设计模式使用较多

    抽象类使用的注意事项和细节讨论

    1)抽象类不能被实例化[举例]
    2)抽象类不一定要包含abstract方法。也就是说抽象类可以没有abstract方法[举例
    3)一旦类包含了abstract方法,则这个类必须声明为abstract [说明]
    4)abstract只能修饰类和方法,不能修饰属性和其它的。[说明]
    5)抽象类可以有任意成员[抽象类本质还是类] ,比如:非抽象方法、构造器、静态属性等等
    6)抽象方法不能有主体,即不能实现如图所示image-20221115214428823

    7)如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为abstract类。[举例 A类,B类,C类]
    8)抽象方法不能使用private、final和static来修饰,因为这些关键字都是和重写相违背的。

    抽象类最佳实践 模板设计模式

    1)有多个类,完成不同的任务job
    2)要求统计得到各自完成任务的时间
    3)请编程实现

    感情的自然流露
    1.先用最容易想到的方法
    2.分析问题,提出使用模板设计模式

    设计一个抽象类(Template),能完成如下功能:
    1)编写方法calculate Time() ,可以计算某段代码的耗时时间
    2)编写抽象方法job()
    3)编写一个子类Sub,继承抽象类Template,并实现job方法。
    4)编写一个测试类TestTemplate, 看看是否好用。

    image-20221116113329904

    Template.java

    package src.template;
    
    public abstract class Template {
        public abstract void job();
    
        public void calTime() {
            long start = System.currentTimeMillis();
            job();
            long end = System.currentTimeMillis();
            System.out.println("任务执行时间: " + (end - start));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    AA.java

    package src.template;
    
    public class AA extends Template {
    
        @Override
        public void job() {
            long num = 0;
            for (long i = 0; i < 10000; i++) {
                num += i;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    BB.java

    package src.template;
    
    public class BB extends Template {
    
        @Override
        public void job() {
            long num = 0;
            for (long i = 0; i < 10000000; i++) {
                num += i;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    Test.java

    package src.template;
    
    public class Test {
        public static void main(String[] args) {
            AA aa = new AA();
            aa.calTime();
            BB bb = new BB();
            bb.calTime();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    【Vue入门】语法 —— 事件处理器、自定义组件、组件通信
    【笔记】ASP.NET Core 2.2 Web API —— 学习笔记
    Linux——进程
    python数据容器——元组、字符串
    Qt creator生成动态库
    linux bash forkBomb 炸弹测试脚本程序
    运行yolov5 v6遇到的问题
    PHP毕业设计源代码计算机信息管理学院网站
    类和对象、包等知识总结Java
    闭关之 C++ 并发编程笔记(一):线程与锁
  • 原文地址:https://blog.csdn.net/Drifter_Galaxy/article/details/127919532