1. 使用上的区别
extends
:
- 用于类继承。
- 一个类可以继承另一个类,从而获得父类的属性和方法。
- Java 只支持单继承,即一个类只能继承一个父类。
简单理解为,你只有一个爸爸,只能继承你的亲爸爸的基因。
implements
:
- 用于实现接口。
- 一个类可以实现一个或多个接口。
- 实现接口的类必须实现接口中所有的抽象方法,除非它是一个抽象类。
简单理解为,你可以有很多个社会角色。比如一个人,白天在办公室是一个勤奋的社畜青年,实现了Employee
接口,但到了晚上回家后,变成了一个沉迷于电视剧和零食的失意青年,实现了CouchPotato
接口。在这种情况下,该人需要具备办公室摸鱼(Fishing方法)和刷视频(BrushVideos 方法)的能力,这些能力是通过实现 Employee
和 CouchPotato
这两个接口来展示的。
2. 功能上的区别
继承(
extends
):
- 继承是面向对象编程中的一个基本特性,允许一个类继承另一个类的属性和方法。
- 继承主要用于代码的重用和扩展现有类的功能。
- 子类继承父类所有的非私有成员(属性和方法)。
举个例子:
- 老式手机(父类):拥有打电话和发短信的功能。
- 新款手机(子类):继承了老式手机的功能(打电话和发短信),并扩展了新的功能(拍照)
实现(
implements
):
- 接口定义了一组方法规范,但不提供这些方法的实现。
- 一个类实现一个接口,就必须提供接口中所有方法的具体实现。
- 接口支持多实现,即一个类可以实现多个接口。
举个例子:
你决定学习不同类型的艺术,比如画画和弹钢琴。
- 艺术家(你的类):能够实现不同的艺术形式。
- 画家(接口):定义了画画的方法。
- 钢琴家(接口):定义了弹钢琴的方法。
这时候,你想怎么画怎么画,想怎么弹怎么弹,自己定义。
3. 抽象性的区别
类(
extends
):
- 类可能是具体的或抽象的。
- 抽象类可以包含抽象方法(没有实现的方法)和具体方法。
- 子类通过继承可以扩展或修改父类的行为。
接口(
implements
):
- 接口通常是完全抽象的(Java 8 之前),只定义方法签名,不包含实现。
- Java 8 引入了默认方法和静态方法,允许接口中包含具体实现。
- 接口更多地用于定义类型的行为而非其状态。
4. 设计目的的区别
extends
主要用于表达类之间的“是一个(is-a)”关系,例如Cat
是一个Animal
。implements
用于表示类与接口之间的“能做什么(can-do)”关系,例如Car
可以Drive
。