Java抽象类(abstract)

news2025/8/12 21:14:49

抽象类

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

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

访问修饰符 abstract 类名 {}

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C. Division(分解质因数)

Problem - 1445C - Codeforces 奥列格最喜欢的科目是历史和数学&#xff0c;而他最喜欢的数学分支是除法。 为了提高他的除法技巧&#xff0c;奥列格想出了t对整数pi和qi&#xff0c;并决定为每对整数找到最大的整数xi&#xff0c;这样。 pi能被xi整除。 xi不能被qi整除。 奥…

基于NodeJs+Express+MySQL 实现的个人博客完整项目

目录 一、创建项目并初始化 项目结构 二、安装项目所需要的包 三、创建所需要的数据库表 表 user 用于存放账户密码 表 notepad 用于存放文章数据 表 leaving 用于存放留言板的数据 三、编写app.js文件 1、导入所有需要的包 2、创建web服务器 3、创建db文件夹&#…

智能制造APS,赋能「钣金行业」提升数字化战斗力!

导语&#xff1a; 钣金加工是典型的离散制造行业&#xff0c;具有品种多、批量小、交期短、质量要求高的发展趋势&#xff0c;这对钣金车间的生产管理提出了新的挑战。推进行业数字化、智能化改造&#xff0c;实现质效双提升&#xff0c;打破增长瓶颈&#xff0c;成为钣金行业…

Git常用命令与分支管理

Git常用的命令有以下6个&#xff1a;fetch/clone命令&#xff0c;add命令&#xff0c;commit命令&#xff0c;checkout命令&#xff0c;push命令&#xff0c;pull命令。 workspace&#xff1a;工作区staging area&#xff1a;暂存区loacl repository&#xff1a;本地仓库remot…

计算机毕业设计springboot+vue+elementUI会员制医疗预约服务管理信息系统

项目介绍 会员制医疗预约服务管理信息系统是针对会员制医疗预约服务管理方面必不可少的一个部分。在会员制医疗预约服务管理的整个过程中&#xff0c;会员制医疗预约服务管理系统担负着最重要的角色。为满足如今日益复杂的管理需求&#xff0c;各类的管理系统也在不断改进 本系…

字节面试问到CPU的多级缓存架构,诸佬们怎么回答?

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;上周在面试字节中&#xff0c;问到了一个关于CPU多级缓存架构的问题&#xff0c;当时答得并不是很好&#xff0c;之后查阅了资料&#xff0c;对此进行了复盘总结。 如果文章有什么需要改进的地方…

全网最详细SpringBoot、SpringCloud整合阿里云OSS对象存储服务

1、进入阿里云官网 https://www.aliyun.com/ 2、搜索“对象存储OSS” 3、进入“管理控制台” 4、进入“Bucket列表”&#xff0c;点击“创建Bucket” 5、根据实际情况选择&#xff0c;最后点击“确定” 这里插入一个可以通过代码创建Bucket的测试类&#xff0c;如下&#xff…

什么是供应商管理?为什么它很重要?

**供应商管理**是确保企业付给供应商的钱获得最大价值的过程&#xff0c;且目标是确保与供应商签订的所有合同都能满足企业业务的需求。 乍一看&#xff0c;供应商管理似乎是一件很容易总结的事情&#xff0c;建立适当的关系&#xff0c;管理需求&#xff0c;并与供应商进行清…

VR直播系统设置大揭秘,带你穿越时空亲临现场

直播现在可谓是各个行业的香饽饽&#xff0c;不管是电商带货直播&#xff0c;还是游戏竞赛直播都是如火如荼。而VR直播也逐渐频繁出现在大众眼前&#xff0c;就例如前两年广大人民都是通过VR直播在线观看火神山的建设&#xff0c;随着近两年5G技术和VR技术的兴起和发展&#xf…

MongoDB安装及进程介绍

文章目录 MongoDB安装重要的进程介绍mongo进程其他进程MongoDB安装 MongoDB 官方已经提供了Linux、Windows、Mac OS X 以及Solaris 4 种平台的二进制分发包,最新的稳定版本是 6.0.2,下载地址是:https://www.mongodb.com/try/download/community,如图: 下载完成后,解压…

Vue3源码解读之patch

例子代码 本篇将要讲解dom diff&#xff0c;那么咱们结合下面的例子来进行讲解&#xff0c;这个例子是在上一篇文章的基础上&#xff0c;加了一个数据变更&#xff0c;也就是list的值发生了改变。html中增加了一个按钮change&#xff0c;通过点击change按钮来调用change函数&a…

Java语法之封装

我们应该都知道Java面向对象的三大特性&#xff1a;封装&#xff0c;继承&#xff0c;多态&#xff0c;今天小编给大家分享封装这个概念以及使用&#xff0c;我们开始吧&#xff1a; 目录 &#x1f389;封装的概念 &#x1f389;封装的使用 &#x1f389;封装的好处 &#…

论文写作:word连续交叉引用

文章目录一、问题背景二、步骤一、问题背景 在写作得时候&#xff0c;使用word的 “交叉引用”功能可以形成超链接格式的标号。但是交叉引用每次只能选择一篇论文&#xff0c;在连续选择多篇论文的时候&#xff0c;就是 “[1][2][3]” 而不是 “[1-3]” 这样的格式。 如图&…

redis set zset key 常用命令

list 可以重复 set不可以 list 有序 set元素位置无序 key常用命令 #1. 存储数据 sadd key member [member ...] 获取的结果是无序的 #2. 获取数据&#xff08;获取全部数据&#xff09; smembers key #3. 随机获取一个数据&#xff08;获取的同时&#xff0c;移除数据&#…

22.11.17打卡 mysql学习笔记

为了不挂科...... 内连接 2022年11月17日 19:34 分为隐式内连接和显式内连接 区别是: 表的连接形式和链接条件的表现形式; 链接条件的表现形式 隐式内连接 显式内连接 外连接 2022年11月17日 19:44 外连接分为左外连接和右外连接 左外连接 右外连接 自连接 2022年11月17…

为什么vue3要选用proxy,好处是什么?

提问 Object.defineProperty()和proxy的区别&#xff1f;为什么vue3要选用proxy&#xff0c;好处是什么&#xff1f; proxy Proxy 对象用于创建一个对象的代理&#xff0c;从而实现基本操作的拦截和自定义&#xff08;如属性查找、赋值、枚举、函数调用等&#xff09;。 Pr…

微软推出Azure量子资源估算器,加速量子算法研发

​ &#xff08;图片来源&#xff1a;网络&#xff09; 近期&#xff0c;微软推出了Azure量子资源估算器&#xff0c;以帮助研发人员检查他们的算法是否可以在未来规模化的量子计算机上运行&#xff0c;并在不同硬件之间进行比较&#xff0c;同时估算在这些系统上执行量子应用…

JVM——垃圾回收机制和内存分配策略

文章目录垃圾回收的垃圾是什么如何判断一个对象是不是垃圾引用计数法可达性分析算法Java的引用垃圾回收基础算法标记清除标记整理标记复制分代垃圾回收GC分析实例HotSpot算法实现细节根节点枚举记忆集与卡表为什么需要记忆集卡表写屏障写屏障&#xff08;Write Barrier&#xf…

如何实现 MySQL 增删改查操作

文章目录1.新增1.1 不指定列插入1.2 指定列插入1.3 一次性插入多行2.查询2.1 全列查询&#xff08;查询表中的所有列&#xff09;2.2 指定列查询2.3 在查寻过程中进行简单计算&#xff08;列和列之间&#xff09;2.4 给查询结果的列指定一个别名2.5 查询的时候针对列来去重&…

【AI绘画 | draft意间】国产draft推荐及AI绘画背后的原理解读

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;喜欢编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…