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

Java接口和抽象类的区别

文章目录

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


前言

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

两者语法上的区别

先说一下语法上的区别

接口

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

抽象类

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

两者思想上的区别

接口

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

抽象类

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



http://www.kler.cn/a/315594.html

相关文章:

  • GPT-5 要来了:抢先了解其创新突破
  • [Linux] Linux信号捕捉
  • androidstudio下载gradle慢
  • 提取神经网络数学表达式
  • pySpark乱码
  • 区块链技术在慈善捐赠中的应用
  • calibre-web报错:File type isn‘t allowed to be uploaded to this server
  • Ubuntu20.04配置NVIDIA+CUDA12.2+CUDNN【附所有下载资源】【亲测有效】【非常详细】
  • 设计模式-依赖注入
  • Mac剪贴板历史全记录!
  • 单片机的信号线都需要差分布放吗?
  • turtle实现贪吃蛇小游戏
  • 【鼠标滚轮专用芯片】KTH57913D 霍尔位置传感器
  • 面试题(二)
  • 大学生请码住!分享10款AI论文工具搞定论文开题到答辩全过程!
  • 动态路由---OSPF协议基础
  • 【时时三省】(C语言基础)指针笔试题3
  • 配置实验用的 Rocky Linux
  • World of Warcraft [CLASSIC] International translation bug
  • 常见单片机
  • Java中stream流及Collectors的常见用法详细汇总!!!
  • 掌握回流与重绘面试回答:优化网页加载与响应速度
  • 前后端分离的情况下,后端接口有必要加CSP策略吗?
  • 数据集-目标检测系列-自行车检测数据集 bike>> DataBall
  • Linux系统中文件I/O
  • yolov5实战拓展