
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.4 接口的继承与实现

扫码看视频
正如类之间可以继承一样,一个接口也可以继承另一个接口,但这种继承更应该称为扩展。例如,考虑到某些动物是可以飞行的,为此我们再定义一个FlyableAnimal接口,让它从Animal接口继承,同时声明一个fly方法,如代码6.9所示。

上述代码定义了一个FlyableAnimal接口,扩展了Animal接口,定义了可飞行的动物应该具有的特征。陆地上的动物可以实现动物接口,而飞禽则可以实现FlyableAnimal接口。
为了避免多重继承带来的基类方法调用冲突的问题,Java只允许类的单继承,但允许接口的多继承。例如,现在有一个玩具厂商生产了一种会说话的动物玩具,有各种形式的动物,那么我们就可以定义一个动物玩具接口AnimalToys,让它从Animal接口继承,从而具有了动物的行为特征。我们知道人是可以说话的,但是要让动物玩具从人继承,或者实现人接口,就有点不合情理了。为此,我们可以单独定义一个Speakable接口,在该接口中声明一个say方法,由于Java支持接口的多继承,因此可以让AnimalToys接口也继承Speakable接口,如代码6.10所示。

现在具体的动物玩具类直接实现AnimalToys接口即可。
类在实现接口时,也可以同时实现多个接口。飞行的行为具有通用性,并不仅限于飞禽,例如玩具飞机也可以飞,所以我们单独定义一个Flyable接口,在该接口中声明fly方法,如代码6.11所示。

现在我们要编写一个Bird类,它是动物,又会飞,因此可以让Bird类同时实现Animal和Flyable这两个接口,如代码6.12所示。
