一、含义
1、extends 用于继承父类,只要那个类不是声明final或者定义为abstract就能继承。如:
2、implements 用于实现接口,因为接口只定义方法,没有程序实现,它必须由使用者来实现这些功能。如:
二、区别
extends和implements有什么不同?
对于class而言,extends用于(单)继承一个类(class),而implements用于实现一个或多个接口(interface)。
interface的引入是为了部分地提供多继承的功能。在interface中只需声明方法头,而将方法体留给实现的class来做。这些实现的class的实例完全可以当作interface的实例来对待。在interface之间也可以声明为extends(多继承)的关系,即一个interface可以extends多个其他interface,extend可以继承一个接口,但仍是一个接口,还是需要implements之后才可使用的。
extends:可以理解为全盘继承了父类的功能
implements:可以理解为为这个类附加一些额外的功能
举个动物类(猫、狗、鸟、昆虫)的例子:
Animal是一个父类,cat,dog,bird,insect都extends了Animal,但是cat,dog还可以implements比如跑、叫(run、shout)这些interface,bird,insect可以implements比如飞(fly)这些interface。
java中不支持多重继承,但是可以使用接口来实现这一目的,这样就要用到implements。继承只能继承一个父类,但implements可以实现多个接口,用逗号分开就行了 比如 :
接口实现的注意点:
a.实现一个接口就是要实现该接口的所有的方法(抽象类除外)。
b.接口中的方法都是抽象的。
c.多个无关的类可以实现同一个接口,一个类可以实现多个无关的接口。
与extends的不同
extends,可以实现父类,也可以调用父类初始化 this.parent()。可以继承、覆盖父类定义的变量或者函数。这样的好处是:架构师定义规划好类的接口(类中的方法),让工程师具体实现就可以了。整个项目开发效率和开发成本大大降低。
implements,实现父接口,子类不可以覆盖父接口的方法或者变量。即使子类定义与父类相同的变量或者函数,也会被父接口中的相同的变量或者函数取代掉。
这两种实现的具体使用,要看项目的实际需要,如果希望实现不可以修改父类,使用implements,只定义接口需要具体实现;如果希望允许修改或者扩展父类,则使用extends。
三、接口和抽象类的区别
1、接口可以被多重implements,抽象类只能被单一extends;
2、接口只有定义,抽象类可以有定义和实现;
3、接口的字段定义默认为public static final,抽象类字段默认是“friendly”(本包可见)。