天天看点

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

本节书摘来华章计算机《数据结构与抽象:java语言描述(原书第4版)》一书中的第1章 ,第1节,[美]弗兰克m.卡拉诺(frank m. carrano) 蒂莫西m.亨利(timothy m. henry) 著 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

实现接口的任何类,必须在类定义的开头使用implements子句进行说明。例如,如果类circle实现了接口measurable,它的开头就是下面这种形式:

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

然后,类必须定义接口中声明的每个方法。在本例中,类circle必须至少实现方法getperimeter和getarea。

如果写一个实现measurable的类square,这个类的开头应该是这样的:

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

且它至少应该定义方法getperimeter和getarea。显然,这两个方法的定义不同于它们在类circle中的定义。

图p-3展示了包含measurable、circle、square以及它们的客户的文件。

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口
注:写接口是类的设计人员向其他程序员说明方法的一种方式。实现接口是程序员确保类已经定义了某些方法的一种方式。 注:不同的类或许以不同的方式实现同一个接口。例如,可以有多个类都实现接口measurable,且为方法getperimeter和getarea写各自的版本。 示例。想象用于圆、球体和圆柱体等不同几何形状的类。其中的每一个几何体都有一个半径。我们可以定义下列接口,让类来实现它:
《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

接口能知道已经定义了半径,所以为这个量声明set方法和get方法。但是,不能为半径声明数据域。实现接口的类来做这件事。

实现这个接口的类circle如下所示:

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

类定义了一个私有数据域radius,且实现了接口circular中声明的方法setradius和getradius。接口中不能含有像radius这样的数据域,因为它是私有的。

注:类中定义的方法数可以超出它实现的接口中声明的方法数。例如,类circle定义了方法getarea,它没有包含在接口circular中。

多个接口。类可以实现多个接口。如果想这样做,只需列出所有的接口名,并以逗号分隔即可。如果类是从另一个类派生而来的,则implements子句永远在extends子句的后面。所以,可以写

《数据结构与抽象:Java语言描述(原书第4版)》一P.3.2 实现一个接口

要想记住这个次序,只需记住保留字extends和implements在类头中以字母序出现即可。

实现多个接口的类必须定义接口中声明的每个方法。如果在类实现的多个接口中出现了相同的方法头,则类中只需定义一个即可。

不能从多个基类派生一个类。这个限制避免了实现继承时可能出现的冲突。但java接口含有方法的规格说明,但不实现它们。类可以实现这些规格说明,而不管它们出现在一个接口中还是出现在多个接口中。通过允许类来实现多个接口这种机制,java既实现了多重继承,又去掉了它可能引起的混乱。

自测题5 写一个java接口,它定义学生类并声明其中的方法。

自测题6 定义一个类,规范实现前一个问题中你写的接口。要包含数据域、构造方法及至少一个方法的定义。