【Java】接口和抽象类有什么共同点和区别?

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

【Java】接口和抽象类有什么共同点和区别?

  • 比较:接口和抽象类
    • 🚀共同点
    • 🚀区别


比较:接口和抽象类


🚀共同点

共同点

  1. 抽象性: 接口和抽象类都是用于表示抽象类型,不能被实例化,需要子类来实现或继承
  2. 包含抽象方法: 接口和抽象类都可以包含抽象方法 ,这些方法在子类中需要被具体实现。
  3. 支持多态: 通过接口或抽象类,可以实现多态性 ,即通过统一的接口或抽象类类型引用不同的实现类对象。
  4. 都可以有默认实现的方法: Java 8 可以用 default 关键字在接口中定义默认方法

在 Java 8 及以后的版本中,引入了默认方法(Default Methods) 的概念,允许在接口中使用 default 关键字为接口方法提供默认的实现。这样可以在不破坏现有代码的基础上向接口中添加新的方法,而不需要修改所有实现该接口的类。同样,抽象类也可以拥有具有默认实现的方法。

下面是一个简单的例子,演示了在接口和抽象类中使用 default 关键字声明默认实现的方法:

在这个例子中,MyInterface 接口和 MyAbstractClass 抽象类

都定义了一个抽象方法 abstractMethod 和一个默认方法 defaultMethod

然后,MyClass 类实现了这个接口并继承了抽象类,实现了抽象方法,并且可以选择是否重写默认方法。

main 方法中,创建了 MyClass 的实例,并调用了抽象方法和默认方法,展示了默认方法的使用。

// 接口
interface MyInterface {// 抽象方法void abstractMethod();// 默认方法default void defaultMethod() {System.out.println("This is a default implementation of MyInterface.");}
}// 抽象类
abstract class MyAbstractClass {// 抽象方法abstract void abstractMethod();// 默认方法default void defaultMethod() {System.out.println("This is a default implementation of MyAbstractClass.");}
}// 具体类实现接口和继承抽象类
class MyClass extends MyAbstractClass implements MyInterface {// 实现抽象方法@Overridevoid abstractMethod() {System.out.println("This is the implementation of abstractMethod in MyClass.");}// MyClass 可以选择重写默认方法@Overridepublic void defaultMethod() {System.out.println("This is a overridden default implementation in MyClass.");}
}public class DefaultMethodExample {public static void main(String[] args) {// 创建 MyClass 实例MyClass myClass = new MyClass();// 调用抽象方法和默认方法myClass.abstractMethod();myClass.defaultMethod();}
}



🚀区别

区别

  1. 能否多继承: 一个类可以实现多个接口,但只能继承一个抽象类。
  2. 成员变量: 接口的成员变量只能是public static final修饰的常量,不能被修改且必须有初始值;抽象类可以包含实例变量,成员变量默认 default,可在子类中被重新定义,也可被重新赋值。
  3. 构造方法: 接口不能有构造方法;抽象类可以有构造方法,子类实例化时会调用父类的构造方法。
  4. 用途: 接口主要用于对类的行为进行约束(即定义规范),支持多继承,你实现了某个接口就具有了对应的行为,强调一种能力;抽象类主要用于建立类的层次结构以实现代码复用,强调的是所属关系。




在这里插入图片描述

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

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

相关文章

基于遗传算法的药品配送,遗传算法原理

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 完整代码下载: 基于遗传算法的药品配送 背影 基于遗传算法的药品配送,求解运算量大,一般都无法用直接求解,本文用遗传算法进行求解,遗传算法拥有更好的全局寻优能力, 遗传算法 …

SQL Server注入之攻防技战法

那天下着很大的雨,母亲从城里走回来的时候,浑身就是一个泥人,那一刻我就知道我没有别的选择了 1.Mssql报错注入 0.判断数据库类型 1.爆当前用户名 2.爆版本 3.爆服务器名 4.判断数据库个数 5.获取全部数据库 语句只适合>2005 爆当前数据…

DDD落地实践-架构师眼中的餐厅(转)

本文以餐厅场景为叙事主线,以领域驱动为核心思想,结合架构设计与功能设计方法论。是从领域分析到落地的全过程案例,内容偏重于落地,因此不乏一些探讨,欢迎指正。 文章较长、全程干货、耐心读完、必有收获。 本文不针…

算法训练第五十七天|647. 回文子串、516.最长回文子序列

647. 回文子串: 题目链接 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由…

【docker】如何编写dockerfile文件,构建docker镜像

如何编写dockerfile文件,构建docker镜像 一、docker 镜像与 dockerfile1.1 什么是Docker镜像1.2 Docker 镜像的结构 二、dockerfile 中常用的构建指令三、dockerfile 内容示例四、构建 docker 镜像 一、docker 镜像与 dockerfile 1.1 什么是Docker镜像 Docker镜像…

虾皮跨境电商物流:为卖家提供高效灵活的物流解决方案

虾皮(Shopee)作为一家知名的跨境电商平台,其物流服务是其成功的关键因素之一。虾皮跨境电商物流服务为卖家提供了一站式的物流解决方案,从订单处理到最终交付,为卖家提供高效、灵活、成本效益高的物流服务,…

【教学类-43-13】 20240103 (4宫格数独:错误版:768套) 不重复的基础模板数量:768套

作品展示:——4宫格 768套不重复模板(64页*12套题) 有错误,实际数量小于768套 背景需求: 测试4宫格数独基础模板有几种。 写个程序,验算是不是真的是乘阶法的288种。 代码展示: 768套4宫格题…

Python for与while循环的介绍和对应练习题的巩固

for循环 重复执行同一段代码就是循环 循环列表 for val in list_name: list_num [1,2,3,4,5,6,7,8,9] for i in list_num:print(i)代码执行顺序 从上往下依次执行 遍历 通过某种顺序把某种集合所有元素都访问一遍 list_food{"火锅","烧烤","张…

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析(4) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置…

服务器硬件及RAID磁盘阵列详解

文章目录 一、服务器硬件服务器常见故障 二、RAID磁盘阵列详解1、RAID磁盘阵列概述2、RAID 0(条带化存储)3、RAID 1(镜像存储)4、RAID 55、RAID 66、RAID 10(先做镜像,再做条带)7、RAID 01(先做条带&#x…

通配符证书免费获取

通配符证书是一种特殊的SSL/TLS证书,设计用于保护一个主域名及其无限数量的一级子域名。这种类型的数字证书通过使用一个星号(*)作为通配符来实现对多个子域的安全加密,使得所有与指定格式匹配的子域名都能在同一个证书下得到安全…

使用sensors获取LinuxCPU温度

标题使用sensors获取LinuxCPU温度 假设您的 sensors 命令输出类似于以下内容: Copy Codecoretemp-isa-0000 Adapter: ISA adapter Package id 0: 50.0C (high 80.0C, crit 90.0C) Core 0: 45.0C (high 80.0C, crit 90.0C) Core 1: 48.0C (h…

编程语言未来的发展方向

编程语言的未来? 编程语言发展到现在,已经是比较完善并且好用,但这仅仅是对于专业人士来说的。对于普通人来说还是遥不可及。未来编程语言会朝着更加简洁,更加易读的方向去发展,函数式编程和响应式编程会普及。编程语…

机器学习中的监督学习基本算法-逻辑回归简单介绍

逻辑回归 逻辑回归(Logistic Regression)是一种用于解决二分类问题的统计学习方法,尽管名字中带有"回归"一词,但实际上它是一种分类算法。逻辑回归的主要目标是通过学习从输入特征到一个离散的输出(通常是0…

为什么要对服务器进行维护

我们在日常使用服务器的过程中,经常会遇到死机,卡顿等等,那么该怎么做才能避免出现类似情况。 为了确保服务器的正常运行和企业的顺利运营,定期进行服务器维护是必要的。服务器日常维护可以提高性能、保障安全、保持稳定性、延长…

Java基础03-方法与数组

方法 方法的定义 在Java中,方法是一组执行特定任务的代码块。方法定义由以下几个部分组成: 修饰符 返回类型 方法名(参数列表) {// 方法体 }修饰符:指定方法的访问权限(public、private等)。返回类型:指…

mybatisPlus beforeGetBoundSql和setProperties使用场景介绍及代码示例

beforeGetBoundSql 和 setProperties 都是 InnerInterceptor 接口中定义的默认方法,可以用于自定义拦截器实现。 beforeGetBoundSql 方法会在 MyBatis 获取 BoundSql 对象之前被调用,可以通过该方法来修改或扩展 SQL 语句,例如添加或删除条件…

利用Spring Cloud和Java系统设置优化工程项目管理系统源码的二次开发体验

工程项目管理涉及众多环节和角色,如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统,该系统支持前后端分离,功能全面,可满足不同角色的需求。从项目进度图表到施工地图,再到…

不忘初心,聚焦安全 —— 一名码龄15年的老程序员2023总结

2023总结 1. 整体回顾2. 亮点工作3. 未来展望 1. 整体回顾 作为一名码龄超15年的老程序员,虽然2008年就注册了CSDN博客,但是从2020年疫情以来才开始偶尔写写博客,前面两年虽然写了不少,但基本属于自娱自乐,粉丝量和阅…

匿名函数自调用的不同写法

匿名函数自调用,即函数只执行一次 匿名函数自调用一般写法为: (function(){ //具体内容 }() 其他写法如下: !function(){}() function(){}() ~function(){}() 初次外,前面还可以是:,-,*,/