本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第1章 ,第1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 著 罗得岛大学 新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
P.3.3 接口作为数据类型
当声明变量、数据域或方法的参数时,可以将Java接口用作数据类型。例如,前面的方法giveLastNameTo有一个类型为NameInterface的参数:
传送给这个方法的任何实参,必须是实现NameInterface的类的对象。
为什么不将aName的类型声明为一个类,如Name呢?我们想让接口独立于实现它的类,因为实现一个接口的类可以有多个。使用NameInterface作为参数的类型,能保证方法的实参将具有NameInterface中声明的所有方法。通常,如果数据类型是接口,你能保证方法的参数有特定的方法,即接口中声明的那些方法。另一方面,参数只有那些方法。
如果一个类C的头不含有implements NameInterface,但仍实现了接口中的方法,又会如何呢?你不能将C的实例做为参数传送给giveLastNameTo方法。
注:通过将接口用作变量的类型,可以说明,这个变量可以引用一个对象,该对象有一组方法且仅有这组方法。
注:接口类型是引用类型。
如下的变量声明
使得myName成为一个引用变量。现在myName可以指向实现NameInterface的任意一个类的任意对象。故如果Name实现了NameInterface,且有
则myName.getFirst()返回指向字符串"Coco"的引用。如果类AnotherName也实现了NameInterface,且随后写了语句
则myName.getFirst()返回指向字符串"April"的引用。
自测题7 为能利用NameInterface,需要对问题5中写的接口及实现它的类Student做哪些修改?