当前位置: 首页 > news >正文

Java接口和抽象类的区别

文章目录

  • 前言
  • 两者语法上的区别
    • 接口
    • 抽象类
  • 两者思想上的区别
    • 接口
    • 抽象类


前言

最近在刷八股的时候看到 接口和抽象类的区别 这个问题,答案就是一些如抽象类使用abstract声明、有抽象方法,接口使用interface声明、一个类可以实现多个接口等。
但是想了一下如果在面试的时候被问这个问题时,面试官是只希望听到这些语法上的区别吗?当然如果面试的是实习生,这么回答也是可以的。但如果面试的是三四年工作经验的呢,恐怕是想听到的是两者更加本质上的区别。

两者语法上的区别

先说一下语法上的区别

接口

  • 声明:使用 interface 关键字来声明一个接口。
  • 成员:默认情况下,接口中的方法是公共的(public),并且是抽象的(即没有方法体)。从Java 8开始,接口可以包含默认方法(default)和静态方法(static)。
  • 实现:一个类可以实现多个接口。
  • 访问修饰符:接口中的方法默认为 public,并且不允许使用其他修饰符(如 private, protected)

抽象类

  • 声明:使用 abstract 关键字来声明一个类。
  • 成员:可以包含抽象方法(没有实现的方法)、具体方法(实现了的方法)、构造函数、初始化块、静态方法和静态初始化块等。
  • 继承:一个类只能继承一个抽象类。
  • 访问修饰符:抽象类的方法可以有不同的访问修饰符(如 public, protected, private)。

两者思想上的区别

接口

自上而下,在定义接口的时候不需要考虑子类实现,子类在实现时必须遵守接口的规范

抽象类

自下而上,在定义抽象类时需要考虑子类中的共性,将共性抽取出来之后就变成了抽象类
抽象类的思想和设计模式中的模版方法模式思想不谋而合,因此模板方法模式通常使用抽象类来实现。


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机组成原理(笔记5原码和补码的乘法以及直接补码阵列乘法器 )
  • 【Kubernetes】常见面试题汇总(二十八)
  • 【每日一题】LeetCode 2306.公司命名(位运算、数组、哈希表、字符串、枚举)
  • 技能深化与软实力双提升
  • Claude 的上下文检索功能提升了 RAG 准确率,这会是人工智能革命?
  • 某建筑市场爬虫数据采集逆向分析
  • pgvector docker版安装;稀疏向量使用;psycopg2 python连接使用
  • C语言究竟是一门怎样的语言?
  • Go语言中的并发编程
  • 24暑假实习信息、25秋招提前批信息,地信、测绘、遥感、地质相关岗位招聘汇总
  • C++标准库双向链表 list 中的insert函数实现。
  • 游戏如何应对云手机刷量问题
  • 使用AI进行需求分析的案例研究
  • Invalid Executable The executable contains bitcode
  • Redis实践之缓存:.NET CORE实现泛型仓储模式redis接口
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 4. 路由到控制器 - Laravel从零开始教程
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • C++11: atomic 头文件
  • Fabric架构演变之路
  • Intervention/image 图片处理扩展包的安装和使用
  • Map集合、散列表、红黑树介绍
  • Netty源码解析1-Buffer
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 关于Flux,Vuex,Redux的思考
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 聊聊directory traversal attack
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 一天一个设计模式之JS实现——适配器模式
  • 主流的CSS水平和垂直居中技术大全
  • 【干货分享】dos命令大全
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​补​充​经​纬​恒​润​一​面​
  • #etcd#安装时出错
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (day6) 319. 灯泡开关
  • (Python) SOAP Web Service (HTTP POST)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (差分)胡桃爱原石
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (转)c++ std::pair 与 std::make
  • (转)Mysql的优化设置
  • (转)Windows2003安全设置/维护
  • .gitignore不生效的解决方案
  • .NET Framework与.NET Framework SDK有什么不同?
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @Autowired和@Resource的区别
  • @Autowired自动装配