抽象类的顶级理解

news2024/10/5 14:44:07

目录

1.抽象类的介绍

2. 抽象类语法

3.模板设计模式


1.抽象类的介绍

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果 一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

上述概念可能过于抽象,其实我们可以代入场景去理解。

当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法, 这个方法就是抽象方法,用abstract来修饰该类就是抽象类。


2. 抽象类语法

1. 抽象类不能直接实例化对象

 否则会报错

2.抽象类也是类,内部可以包含普通方法和属性,甚至构造方法,但abstract只修饰类和方法,不修饰属性和其他。

3. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量 

4.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

  abstract class Rect  {
    private double length;
    private double width;
    Rect(double length, double width){
        this.length = length;
        this.width = width;
    }
}

5.抽象方法不能是 private

 6.抽象方法不能被finalstatic修饰,因为抽象方法要被子类重写

7. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法 ,否则子类也是抽象类,必须要使用 abstract 修 饰

8.抽象方法不能有主体


3.模板设计模式

(1)有多个类,完成不同的任务,A任务计算1到25的和,B任务计算1乘到10000000

(2))要求统计得到各自完成任务的时间

public abstract class Text01 {
    public abstract void job();//抽象方法
    public void calculateTime() {//实现方法,调用 job 方法
//得到开始的时间
        long start = System.currentTimeMillis();
        job(); //动态绑定机制
//得的结束的时间
        long end = System.currentTimeMillis();
        System.out.println("任务执行时间 " + (end - start));
    }

    public static void main(String[] args) {
        A a=new A();
        a.calculateTime();
        B b=new B();
        b.calculateTime();

    }
}
class A extends Text01{
    @Override
    public void job() {
        long  num = 1;
        for (long i = 1; i <= 25; i++) {
            num *= i;
        }
        System.out.println("A工作完成"+num);
    }
}
class B extends Text01{

    @Override
    public void job() {
        long num = 0;
        for (long i = 1; i <= 10000000; i++) {
            num += i;
        }
        System.out.println("B工作完成"+num);
    }
}

运行结果:


以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

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

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

相关文章

【Vue3项目实战】vue3项目基于el-menu封装左侧菜单栏组件

文章目录 概述一、先看效果1.1 静态效果1.2 动态效果 二、核心思路三、全量代码3.1 文件目录结构3.2 /sidebar/index.vue 中3.3 /sidebar/sidebarItem.vue 中3.4 路由表结构 四、代码讲解五、SVG组件六、系列文章友链1、[配置husky、stylelint、commitlint&#xff0c;实现git提…

庄懂的TA笔记(十九)<特效:顶点 平移+缩放+旋转+幽灵夜巡效果)>

庄懂的TA笔记&#xff08;十九&#xff09;&#xff1c;特效&#xff1a;顶点 平移缩放旋转幽灵夜巡效果)&#xff1e; 大纲&#xff1a; 效果展示&#xff1a; 正文&#xff1a; 一、顶点平移&#xff1a; 1、代码实现&#xff1a; 1.1、声明移动范围&#xff0c;移动速度。 _…

‘<>‘ cannot be used with anonymous classes

‘&#xff1c;&#xff1e;‘ cannot be used with anonymous classes <>不能与匿名类一起使用 Description Resource Path Location Type <> cannot be used with anonymous classes SearchHitSupport.java /spring-data-elasticsearch/src/main/java/org/spri…

QWidget样式

1、设置边框样式&#xff1a; QWidget {font-family:Microsoft YaHei UI;background:#ffffff;/*border:3px solid rgba(207, 209, 208, 170);设置整体边框*/border-bottom: 3px solid rgba(207, 209, 208, 170);/*设置底部边框*/border-top: 3px solid rgba(207, 209, 208, 1…

谷歌云 | 电子商务 | 如何更好地管理客户身份以支持最佳的用户体验

【本文由Cloud Ace整理发布。Cloud Ace是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷歌云认证培训…

docker创建镜像并上传云端服务器

docker创建镜像并上传云端服务器 docker容器与镜像的关系1.基本镜像相关文件创建1.1 创建dockerfile文件1.2.创建do.sh文件1.3 创建upload_server_api.py文件1.4 创建upload_server_webui.py文件1.5 文件保存位置 2. 创建镜像操作2.1 创建镜像2.3 创建容器2.2 进入环境容器2.3 …

leetcode----JavaScript 详情题解(4)

目录 2722. 根据 ID 合并两个数组 2723. 添加两个 Promise 对象 2724. 排序方式 2725. 间隔取消 2726. 使用方法链的计算器 2727. 判断对象是否为空 2624. 蜗牛排序 2694. 事件发射器 2722. 根据 ID 合并两个数组 现给定两个数组 arr1 和 arr2 &#xff0c;返回一个新…

Flink 系列四 Flink 运行时架构

目录 前言 介绍 1、程序结构 1.1、Source 1.2、Transformation 1.3、Sink 1.4、数据流 2、Flink运行时组件 2.1、Dispatcher 2.2、JobManager 2.3、TaskManager 2.4、ResourceManager 3、任务提交流程 3.1、standalone 模式 3.2、yarn 模式 4、任务调度原理 4…

AI智慧安监视频监控汇聚平台EasyCVR调用接口出现跨域现象该如何解决?

视频监控汇聚EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视…

Scrum敏捷开发流程图怎么画?

1. 什么是Scrum敏捷开发流程图&#xff1f; Scrum敏捷开发流程图是一种可视化工具&#xff0c;用于形象地描述Scrum敏捷开发方法中的工作流程和活动。Scrum敏捷开发流程图展示了项目从需求收集到产品交付的整个开发过程&#xff0c;帮助团队理解和跟踪项目进展&#xff0c;促…

vue使用FullCalendar插件实现日历会议预约功能

目录 1. vue 项目使用npm安装插件 2. vue 页面代码&#xff08;直接复制粘贴可用&#xff09; 3. vue FullCalendar的内置函数以及配置 前言&#xff1a;此案例是用FullCalendar插件做一个会议日程预约功能&#xff0c;此功能可查看自己的日程安排会议信息等...... FullC…

国产化车载智能座舱方案引领新时代

车载智能座舱是一项集成了多种技术的复杂工程&#xff0c;包括大量的硬件设备、大数据分析、实时交互、用户体验和技术创新研发等。由于涉及的技术领域繁多&#xff0c;智能座舱技术在实际应用中面临很多技术壁垒&#xff0c;如硬件性能、互联互通、集成性、数据采集、存储、处…

Flink正常消费一段时间后,大量反压,看着像卡住了,但又没有报错。

文章目录 前言一、原因分析二、解决方案 前言 前面我也有提到&#xff0c;发现flink运行一段时间后&#xff0c;不再继续消费的问题。这个问题困扰了我非常久&#xff0c;一开始也很迷茫。又因为比较忙&#xff0c;所以一直没有时间能够去寻找答案&#xff0c;只是通过每天重启…

智慧医院该啥样?白皮书给你答案

注意&#xff1a;案例数据均为虚拟数据 随着云计算、大数据、物联网、区块链、新一代互联网通信等新技术的不断发展,“新基建”的不断升级,新医改的不断深化,智慧医院成为我国医院现代化建设的重要发展方向。 党的十八大以来&#xff0c;数字经济更是上升为国家战略&#xff…

运动式蓝牙耳机哪种好、口碑最好的运动蓝牙耳机

为了保持身体健康&#xff0c;许多人在闲暇时选择进行一些日常运动。其中&#xff0c;很多人喜欢在运动时戴上耳机&#xff0c;让身体随着音乐的节奏运动&#xff0c;希望能够增强运动效果。正因如此&#xff0c;市场上涌现了许多优秀的运动耳机品牌&#xff0c;它们推出了一系…

人脸识别场景下Faiss大规模向量检测性能测试评估分析

在前面的两篇博文中&#xff0c;主要是考虑基于之前以往的人脸识别项目经历结合最近使用到的faiss来构建更加高效的检索系统&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于facenetfaiss开发构建人脸识别系统》 Facenet算法的优点&#xff1a;高准确率&#…

MQTT协议详解「概念、特性、版本及作用」

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;是ISO标准下基于发布/订阅方式的轻量级消息协议。MQTT通常使用TCP / IP&#xff08;传输控制协议/Internet协议&#xff09;作为其传输&#xff0c;但也可以使用其他双向传输。MQ…

vue、uniapp直传阿里云文档

前端实现文件上传到oss&#xff08;阿里云&#xff09;适用于vue、react、uni-app&#xff0c;获取视频第一帧图片 用户获取oss配置信息将文件上传到阿里云&#xff0c;保证了安全性和减轻服务器负担。一般文件资源很多直接上传到服务器会加重服务器负担此时可以选择上传到oss&…

【C++】开源:sqlite3数据库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍sqlite3数据库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

【Autolayout自动布局介绍 Objective-C语言】

一、好,我们开始介绍Autolayout 1.什么事Autolayout 好,那么,接下来,我们介绍一下这个Autolayout Autolayout,就是“自动布局” 那么,自动布局,它就是专门用来做UI界面的 那么,UI界面,我们为了适应不同屏幕,要进行自动布局, 所以要使用Autolayout 这个Autolayou…