千家信息网

如何理解Java抽象类和接口

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这期内容当中小编将会给大家带来有关如何理解Java抽象类和接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在面试中我们经常被问到:Java中抽象类和接口的区别是什
千家信息网最后更新 2026年11月01日如何理解Java抽象类和接口

这期内容当中小编将会给大家带来有关如何理解Java抽象类和接口,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在面试中我们经常被问到:Java中抽象类和接口的区别是什么?然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦;一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好像把标准答案熟练的说出来一样。

抽象类和接口这篇文章讲到了他们的区别和联系,它们确实有很多相似的地方,但是从本质上看,或从语言的设计角度来看,这不是它们最本质的区别。

不卖关子,我个人对这两个的理解:

类是具体实例的抽象,比如一个json字符串的抽象;而抽象类就是类的抽象;接口就是抽象类的抽象,接口更像是一种协议

听我慢慢道来~

吐槽

首先,我必须吐槽一下这种面试,我认为面试官凡事问出这种类似"说说抽象类和接口的区别","说说进程和线程的区别"等等问题,都是不负责的表现。

为什么呢?

一个原因就是,面试官对想要招的人完全没有自己的评价标准,另一个原因就是对面试者不负责。这种问题根本不能考验面试者的水平。

那么,如果我来面试别人,我会问:请你说说你怎么理解抽象类和接口;如果要你向你外婆解释进程和线程的区别,你会怎么解释?

我觉得这可以考验面试者对问题的理解程度,我想微软的面试题(你如何向你奶奶解释Excel)一样,考验一个人对某一事物的理解程度(虽然,至今我还不能很好的想明白这个问题 -。-)

抽象类和接口的区别

说到抽象类和接口,就必须要说到类。

一个类就是对现实事物的抽象。

比如定义一个BenzCar类,就需要对现实的奔驰汽车有很好的抽象(当然奔驰汽车有好多系列,这里不钻牛角尖)。也就是说如果你要造一辆奔驰汽车,就需要BenzCar这个类(这辆奔驰汽车就是内存中的一个Instance)。

那么抽象类就是对类的抽象。

怎么理解呢?就是说有很多汽车厂商一起定义一种规范(Car类),说要造一辆汽车就需要有发动机,轮胎,音响设备…(这些就相当于抽象方法),具体用什么发动机,轮胎,音响设备由每个汽车厂商自己去完成。这样就有各种汽车了,奔驰牌的,宝马牌的,丰田牌的…

接口就是对抽象类的抽象

这只是我个人的理解。

在我们日常生活中可以看到各种"接口",电源插座就是一种。开始我是看到耗子叔的博客在开始理解"控制翻转"这个概念的——IoC/DIP其实是一种管理思想| 酷壳- CoolShell.cn。后来我就想,这个东西其实无处不在,制造电源插座的厂和制造电器的厂只要约定一种"接口"——两口插座或三口插座,当然每个国家的接口都不一样,不同接口之间的转换就需要用适配器了。

其实程序中也一样,比如所有的交通工具可以抽象为一个接口Drivable(可能由于经验原因,我考虑的不是很完善),表示实现这个接口的类创建的对象(比如:汽车,飞机,轮船等等)都是可以驾驶的public interface Drivable{ public void drive; }然后,我们就可以创建一个AbstractCar类,表示这个对所有汽车类的一个抽象,所有可以驾驶的汽车都必须继承这个类,这个抽象类中规定了一些抽象方法,比如getEngine当然,你也可以继承AbstractCar类,对所有可能具有相同引擎的汽车进行一层抽象)。drive设为abstract。这两种实现方式,我觉得从功能上讲是一样的,但是从类设计上讲是不同的。下面代码中的实现,我是参考了java.util.AbstractList* @throws UnsupportedOperationException * if adding to this List is not supported.public abstract class AbstractCar implements Drivable { public abstract Engine getEngine; public abstract Wheel getWheel; @Override public void drive{ throw new UnsupportedOperationException; } // 省略其他方法和属性 }默认情况下"汽车"是不能开的,你实现了一个汽车类后,需要Override这个方法,实现自己的drive方法以java容器中的List举例

到源码里面找,你就会发现的继承关系最顶层的就是Iterable,就表示说List是可以遍历的,而且它还会产生一个Iterator接口对象。这表示一个列表可以通过这个迭代器来遍历。

这就像上面说的,所有的交通工具都是可以驾驶的一样,所有的列表都是可以遍历的。

一层一层往下,类就变得更加具体。

为什么接口可以继承?

其实这个原理很简单。因为总有一个最本质的协议来约束大家,比如所有的交通工具都是可以驾驶的,所有的容易都是可以遍历的。然后协议会渐渐变得更加具体:

Iterable <- Collection <- List <- AbstractList <- List

从下往上看,就是一层比一层抽象。

就像我在文章开头说的,

上述就是小编为大家分享的如何理解Java抽象类和接口了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

接口 汽车 就是 方法 插座 问题 驾驶 交通工具 个人 交通 原因 工具 本质 考验 解释 不同 内容 厂商 发动机 对象 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 上海喔噻互联网科技有限公司 西安纸贵互联网科技有限公司 科技平台互联网 互联网科技论文 沃里互联网科技 互联网科技英文翻译 青海省互联网新科技 中国的互联网科技企业的崛起 央行互联网金融科技公司 互联网金融科技公司干啥的 湖南一路畅行互联网科技 宜昌元轩互联网科技有限公司 广西互联网科技孵化中心 迪庆互联网科技招生 云南省自由互联网科技有限公司 易企秀互联网科技是做什么的 求路客互联网科技电话 互联网的黑科技实验室 六子台科技互联网展会 广州紫鲸互联网科技有限公司 浩特互联网科技 狮子座互联网科技培训 互联网科技生活的内容 佩信高科技互联网 深圳市运趣互联网科技有限公司 移动互联网科技公司 佛山市拉法互联网科技有限公司 盐城市攀科互联网科技有限公司 六子台科技互联网展会
0