- Java无难事:详解Java编程核心思想与技术
- 孙鑫
- 549字
- 2021-01-05 17:31:37
6.4 接口的继承与实现
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_19.jpg?sign=1734451592-yrW3j6sstasSltGnF0HCJk0jCxMnCB6o-0-fda415bf55e37c67bde76c9abfe77de4)
扫码看视频
正如类之间可以继承一样,一个接口也可以继承另一个接口,但这种继承更应该称为扩展。例如,考虑到某些动物是可以飞行的,为此我们再定义一个FlyableAnimal接口,让它从Animal接口继承,同时声明一个fly方法,如代码6.9所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_20.jpg?sign=1734451592-ndvD8WDNIT0C8t2bWVlhmleXGFB9xuST-0-78987bf7b4ec8e9e6dee402ec54238cf)
上述代码定义了一个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=1734451592-p0KUXU8hxdIsYcdLAkRcBGEw1FUKVVIh-0-b07388c8386be4fd3c6bce77ea3b24ba)
现在具体的动物玩具类直接实现AnimalToys接口即可。
类在实现接口时,也可以同时实现多个接口。飞行的行为具有通用性,并不仅限于飞禽,例如玩具飞机也可以飞,所以我们单独定义一个Flyable接口,在该接口中声明fly方法,如代码6.11所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_22.jpg?sign=1734451592-IZaON4ovhmCXrATIVI2zsY42KQlyghHw-0-17084f3e049dbad0b680bb76f1e00e58)
现在我们要编写一个Bird类,它是动物,又会飞,因此可以让Bird类同时实现Animal和Flyable这两个接口,如代码6.12所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt006_23.jpg?sign=1734451592-1QLmksfQM74or6m5710PGicwLmKnLqut-0-c7be1d4d28a4f94295092fb5589178b7)