Java接口和抽象类的区别

文章目录


前言

最近在刷八股的时候看到 接口和抽象类的区别 这个问题,答案就是一些如抽象类使用abstract声明、有抽象方法,接口使用interface声明、一个类可以实现多个接口等。

但是想了一下如果在面试的时候被问这个问题时,面试官是只希望听到这些语法上的区别吗?当然如果面试的是实习生,这么回答也是可以的。但如果面试的是三四年工作经验的呢,恐怕是想听到的是两者更加本质上的区别。

两者语法上的区别

先说一下语法上的区别

接口

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

抽象类

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

两者思想上的区别

接口

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

抽象类

自下而上 ,在定义抽象类时需要考虑子类中的共性,将共性抽取出来之后就变成了抽象类

抽象类的思想和设计模式中的模版方法模式思想不谋而合,因此模板方法模式通常使用抽象类来实现。


相关推荐
skilllite作者3 分钟前
GEO 是什么:从搜索引擎到「对话式答案」的信息可见性
java·前端·笔记·安全·搜索引擎·agentskills
平凡但不平庸的码农3 分钟前
Go 语言基础语法
开发语言·后端·golang
是宇写的啊5 分钟前
SpringBoot 统一功能处理
java·spring boot·后端
等....7 分钟前
Spring Boot多模块项目部署
java·spring boot·后端
20岁30年经验的码农12 分钟前
Spring Boot 配置文件生效规则
spring boot·后端·pycharm
今儿敲了吗17 分钟前
链表篇(五)——链表中间结点
数据结构·笔记·算法·链表
斌果^O^22 分钟前
SpringBoot 实战:@Async + CompletableFuture 实现多 SQL 并行统计查询
java·spring boot·sql
weixin_4567231623 分钟前
Java项目的rabbitmq配置vhost
java·rabbitmq·java-rabbitmq
YYYing.23 分钟前
【C++项目之高并发内存池 (三)】万字解析CentralCache与PageCache的初步实现
c++·笔记·哈希算法·高并发·c/c++·内存池
李少兄24 分钟前
解决 java.net.ConnectException: Connection refused 报错
java·开发语言·.net