5.5.2 接口的实现
接口定义的仅仅是实现某一特定功能的一组方法的对外接口和规范,而并没有真正地实现这个功能。这个功能的真正实现是在“继承”了这个接口的各个类中完成的,由这些类来具体定义接口中所有抽象方法的方法体。因此,通常把对接口的“继承”称为“实现”。一个类可以实现一个或多个接口,这些接口在类定义中的implements子句中列出:
说明:(1)在类定义中,用implements声明该类将要实现哪些接口。
(2)实现的方法必须指定为public修饰符。否则,认为缩小方法访问权限范围。
(3)类中必须具体实现该interface中定义的抽象方法。
(4)如果实现接口的类不是抽象类,那么必须实现该interface中定义的全部方法。如果不需要某个方法,也要定义成一个空方法体的方法:
(5)如果实现接口的类是抽象类,那么可以不实现该interface中定义的全部方法。【例5-13】 实现例5-10中定义的接口。
程序运行结果:
狗的叫声是:汪汪.
猫的叫声是:喵喵.
羊的叫声是:咩咩.
分析与思考:接口Shout定义了对外提供shoutSound()的功能,但没有具体实现。狗类、猫类和羊类是功能的实现者,因为它们分别实现了shoutSound()的功能且具体实现各不相同。Ex05_13类执行了狗类、猫类和羊类的shoutSound()方法,即是功能的使用者。
模仿例5-13:将例5-9中的抽象类Shape定义成接口并实现之。
【例5-14】 实现例5-11中定义的接口。
程序运行结果:
小结 抽象类与接口的关系:
(1)抽象类可以含有非抽象方法,提高代码可重用性;接口只能含有抽象方法。
(2)抽象类只能使用单继承,extends后只有一个直接超类名;接口实现了多重继承,extends后是直接超接口名列表。
(3)抽象类用extends来派生子类;接口还需用implements来实现(派生子类)
(4)一个类只能继承一个直接超类(可以是抽象类);但一个类可同时实现多个接口。
(5)相同处:都是通过对抽象方法的覆盖来定义方法体,都不能直接创建对象。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。