首页 > 编程语言 >Java--抽象类与接口

Java--抽象类与接口

时间:2024-08-14 10:40:07浏览次数:11  
标签:Java -- 子类 接口 实现 抽象 抽象类 方法

目录

抽象类的概念

1.什么是抽象(与具体类相对)

Java专门提供了一种机制,名为“抽象方法”。它属于一种不完整的方法,只含有一个声明,没有方法主体。下面是抽象方法声明时采用的语法:
abstract void X();
包含了抽象方法的一个类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。否则,编译器会向我们报告一条出错消息。
若一个抽象类是不完整的,那么一旦有人试图生成那个类的一个对象,由于不能安全地为一个抽象类创建属于它的对象,所以会从编译器那里获得一条出错提示。通过这种方法,编译器可保证抽象类的“纯洁性”,我们不必担心会误用它。

2.为什么要抽象

抽象方法和抽象类看上去是多余的,对于抽象方法,不知道如何实现,定义一个空方法体不就行了吗,而抽象类不让创建对象,看上去只是增加了一个不必要的限制。

引入抽象方法和抽象类,是Java提供的一种语法工具,对于一些类和方法,引导使用者正确使用它们,减少被误用。

使用抽象方法,而非空方法体,子类就知道他必须要实现该方法,而不可能忽略。

使用抽象类,类的使用者创建对象的时候,就知道他必须要使用某个具体子类,而不可能误用不完整的父类。

无论是写程序,还是平时做任何别的事情的时候,每个人都可能会犯错,减少错误不能只依赖人的优秀素质,还需要一些机制,使得一个普通人都容易把事情做对,而难以把事情做错。抽象类就是Java提供的这样一种机制。

抽象类的好处

父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去实现重写,我们设计这样的抽象类,就是为了更好的支持多态

抽象类和接口的区别

参数 抽象类 接口
默认的方法和实现 可以有默认的方法实现 完全抽象,根本不存在方法的实现
实现方式 子类用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要实现父级抽象类中所有抽象方法,父类中非抽象方法可重写也可不重写 子类用implements去实现接口,需要实现接口中所有方法
构造器 抽象类可以有构造器(构造器不能用abstract修饰)
与正常java类的区别 不能被实例化 接口和正常java类是不同的类型
访问修饰符 抽象方法可以用public、protected、default修饰 默认public,不能用其他修饰符
main方法 可以有并运行 没有
多继承 继承一个类和实现多个接口 接口只能继承一个或者多个接口
添加新方法 如果在抽象类中添加新非abstrac的方法,可以直接添加,因为非abstract方法无需在子类中实现,如果是abstact方法,则需要改变子类的代码,也要实现这个方法 只要在接口中添加方法,实现它的类就要改变,去实现这个新添加的方法
速度 比接口快 稍微慢点,因为需要寻找类中实现他的方法

标签:Java,--,子类,接口,实现,抽象,抽象类,方法
From: https://www.cnblogs.com/yangcurry/p/18358399

相关文章

  • 向量检索召回的概念
    向量检索召回(VectorRetrievalRecall)是一种基于向量表示和距离度量的检索方法,广泛应用于自然语言处理、计算机视觉和推荐系统等领域。其基本概念和工作原理如下:###1.**向量表示**:-在向量检索中,文本、图像或其他数据对象首先被转换为向量表示。这些向量通常是高维的,并且每......
  • Java--继承
    目录概念优缺点object类null概念由于封装,使得有共同特征的一类事物的所有描述信息都被归于一类之中,但我们知道,这并不是万能的,有些事物有共性,但还存在区别,比如码农,简单封装起来如下:优缺点优点:1、提高代码的维护性(只需要改动父类)。2、提高代码的复用性(共性的成员抽取到父类中......
  • ComfyUI的安装和基础使用
    简介最近了解了一下AI画图,是通过ComfyUI工具入门的,这里记录一下该工具的安装和基本使用流程。本文的内容将涵盖:ComfyUI的安装ComfyUI的基本使用LoRA模型的使用一些插件推荐一些教程推荐硬件条件:一台通过AutoDL私有云访问的Linux服务器,单卡RTX4090,显存24G......
  • Civitai模型的一个下载技巧
    简介Civitai网站本身是无法直连的,但是Civitai的下载API用的是Cloudflare的服务,是可以直连的。因此,只要能够获取模型的下载链接,就可以在任意环境中直连下载模型了。操作流程本文以https://civitai.com/models/639120这个模型为例,说明操作流程。本文假设读者使用的是Ch......
  • 【医疗器械质量管理体系GB/T42061-2022法规内容了解】
    国标GB/T42061等同于国际标准ISO13485(GB/T42061-2022 idt ISO13485:2016)4.1 组织要求  4.2文件要求  5、管理职责  6、资源管理  7、产品实现  8、测量,分析与改进 ......
  • .NET 8 中利用 MediatR 实现高效消息传递
    前言MediatR是.NET下的一个实现消息传递的库,轻量级、简洁高效,用于实现进程内的消息传递机制。它基于中介者设计模式,支持请求/响应、命令、查询、通知和事件等多种消息传递模式。通过泛型支持,MediatR可以智能地调度不同类型的消息,非常适合用于领域事件处理。在本文中,将通过一......
  • nginx 配置
    Nginxvue项目配置好后,刷新页面会出现404?方案:增加重定向try_files$uri$uri//index.html;mac配置Nginx1、brewinstallnginx安装nginx2、brewinfonginx查询nginx信息 3、查看/修改nginx的配置文件:打开文件/opt/homebrew/etc/nginx/,可以看到有nginx.conf文件,在该......
  • 3152. 特殊数组 II
    3152.特殊数组II题目链接:3152.特殊数组II代码如下:classSolution{public:vector<bool>isArraySpecial(vector<int>&nums,vector<vector<int>>&queries){vector<int>d(nums.size());//std::iota(numbers.......
  • ruoyi框架定时任务教程
    需求背景有时候我们需要动态管理一些定时任务,比如用户自己创建一个任务,在每天的早上9点执行。那我们就不能自己在配置文件中写死cron表达式,应该是一个动态的。ruoyi框架自带了定时任务模块,我们可以快速改造。题外话这里我们只讲定时任务这个功能,简单的两三个任务在这里执行......
  • HTML静态网页成品作业(HTML+CSS)——古诗词网设计制作(5个页面)
    ......