![Java无难事:详解Java编程核心思想与技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/59/35011059/b_35011059.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
6.4 接口的继承与实现
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_19.jpg?sign=1739667158-vSzrwzOmg1mLGotmOUFKd8iTKzGwq3dZ-0-c9b81b2f0c7bf9d976d4d4d9bb7f6ec5)
扫码看视频
正如类之间可以继承一样,一个接口也可以继承另一个接口,但这种继承更应该称为扩展。例如,考虑到某些动物是可以飞行的,为此我们再定义一个FlyableAnimal接口,让它从Animal接口继承,同时声明一个fly方法,如代码6.9所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_20.jpg?sign=1739667158-woDTVwNuyKKmy4i79EWI4PBuRvQZoupb-0-72ed05baeb10308750f95afa492e3fd9)
上述代码定义了一个FlyableAnimal接口,扩展了Animal接口,定义了可飞行的动物应该具有的特征。陆地上的动物可以实现动物接口,而飞禽则可以实现FlyableAnimal接口。
为了避免多重继承带来的基类方法调用冲突的问题,Java只允许类的单继承,但允许接口的多继承。例如,现在有一个玩具厂商生产了一种会说话的动物玩具,有各种形式的动物,那么我们就可以定义一个动物玩具接口AnimalToys,让它从Animal接口继承,从而具有了动物的行为特征。我们知道人是可以说话的,但是要让动物玩具从人继承,或者实现人接口,就有点不合情理了。为此,我们可以单独定义一个Speakable接口,在该接口中声明一个say方法,由于Java支持接口的多继承,因此可以让AnimalToys接口也继承Speakable接口,如代码6.10所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_21.jpg?sign=1739667158-SlNKDFqfCoDo96ZUEnFXHgHIFDk9IERg-0-084f580ec93ff5b01ef686a288beeaf6)
现在具体的动物玩具类直接实现AnimalToys接口即可。
类在实现接口时,也可以同时实现多个接口。飞行的行为具有通用性,并不仅限于飞禽,例如玩具飞机也可以飞,所以我们单独定义一个Flyable接口,在该接口中声明fly方法,如代码6.11所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_22.jpg?sign=1739667158-2RJR6hyzJUxuKVo8hnnWcrAHovFJj5cU-0-ad4049a64e01caa10623a6b02ac9e684)
现在我们要编写一个Bird类,它是动物,又会飞,因此可以让Bird类同时实现Animal和Flyable这两个接口,如代码6.12所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_23.jpg?sign=1739667158-YN9vxmaHbgYu5pO0aKg0AD2ruAppoJVF-0-f6536e6ac0d5a1ad9e61c95c71748fd4)