P.3.1 写一个接口
Java接口的开头很像类的定义,不过要用保留字interface替代class。即接口的开头是如下的语句
而不是这样的
接口可以含有任意多个公有方法头,每个方法头的后面是一个分号。接口不声明类的构造方法,也不能声明静态或终态方法。注意,接口中的方法默认是公有的,故在方法头中可以省略puclic。接口还可以定义任意个公有命名常量。
示例。想象如圆、正方形或一块地这样的对象,它们既有周长又有面积。假定我们想让这种对象的类有一个返回数量值的get方法。如果实现这些类的程序员不是同一个人,则他们可能会用不同的方式来说明这些方法。为确保定义这些方法的类有统一的格式,我们可以写一个接口,如程序清单P-1所示。这个接口为程序员提供了方法说明的简单概要。程序员应该不必查看实现它们的类就能使用这些方法。
程序清单P-1 接口Measurable
将接口定义保存在一个与接口名同名的文件中,后面加上.java。例如,前面这个接口在文件Measurable.java中。
程序设计技巧:Java接口是写注释的好地方,用来说明每个方法的目的、参数、前置条件及后置条件。用这种方式,可以在一个文件中说明一个类,而在另一个文件中实现它。
注:接口可以声明数据域,但它们必须是公有的。通常,类的数据域是私有的,故接口中的任何数据域表示的都应该是命名常量。所以它们应该是公有的、终态的及静
态的。
注:接口中声明的方法不能是静态的,也不能是终态的。但是,可以在实现接口的类中声明这样的方法。
示例。假定你想定义人名的类。最开始或许定义程序清单P-2所示的Java接口,为这个人名类说明方法。限于篇幅,我们只为最开始的两个方法添加了注释。这个接口说明了类中所需要的方法。当实现附录D中程序清单D-1所示的如Name这样的类时可以使用它。另外,只看这个接口,就应该能为类写一个客户。
程序清单P-2 接口NameInterface
注意,方法giveLastNameTo的参数的数据类型是NameInterface而不是Name。我们将在后面谈论接口当作数据类型的话题。现在,只需知道接口不应该限制实现它的类的名字。
注:命名一个接口
接口名,特别是Java中那些标准的接口名,常常以“able”结尾,例如Measurable。这样的结尾并不总能提供一个好名字,所以也经常使用“er”或“Interface”作为结尾。与Java的异常以“Exception”为结尾一样,接口经常以“Interface”作为结尾。