接口
概观
接口被用来统一类的共通行为,当不同的类需要进行信息共享时,是不需要特别去创建类间的关系。举例来说,一个人(Human)及一只鹦鹉(Parrot)都会吹口哨(whistle),然而Human及Parrot不应该为Whistler的子类,最好的作法是令他们为Animal的子类,而他们可以使用Whistler的接口进行沟通。
还有一种接口的使用方法,则是当一个对象有实现特定接口时,我们使用它是不需要知道它的类,例如,一个事物因为口哨的噪音影响到其他人,对于其他人而言,就不需要知道噪音来源是来自人还是鹦鹉,因为他们可以确定,一个会吹口哨的事物正在吹口哨。举一个更实际的例子,排序算法可能会期待对象的类型是可以被比較的,于是它只需要知道对象的类型可以被以某种方式进行排序即可,这与对象的类型无关。whistler.whistle()将会调用对象的实现方法whistle,而不需要知道对象是以哪个类来实现Whistler。
例如:
interfaceBounceable{voidsetBounce();// 注意分號// 介面的方法(method)是公開(public)、抽象(abstract)、永遠不會是最尾端的型別(final)// 把它們想成只是個模型,所以沒有任何方法有被實現}
使用方法
接口的宣告
下列的语法为接口的宣告方式:
接口的主体包含着抽象方法,但所有方法在接口内(定义上)都是抽象(Abstract)方法,所以abstract的关键字在接口内则不被需要。由于接口代表着一个对外行为的集合,所以任何方法在接口内都是public(公开的)。
所以,一个简单的接口可以这么写
publicinterfacePredator{booleanchasePrey(Preyp);voideatPrey(Preyp);}
接口内的成员皆为静态(static)、final及公开(public),反之,他们可以成为任何类或接口的类型
实现一个接口的语法,可以使用这个公式:
类可以用来实现接口,举例来说
publicclassLionimplementsPredator{publicbooleanchasePrey(Preyp){// programming to chase prey p (specifically for a lion)}publicvoideatPrey(Preyp){// programming to eat prey p (specifically for a lion)}}
如果一个类实现了一个接口,而没有实现接口的所有方法,则它必须被标注为abstract(抽象类)。一个抽象类的子类必须实现它未完成的方法,假如该项子类仍不会实现接口的所有方法,那么该项子类依然需要被标注为abstract。
类可以同时实现多项接口
publicclassFrogimplementsPredator,Prey{...}
接口通常被使用在Java编程语言,用来做回调函数使用 。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,把这个接口当成方法的参数,以此来使用该项对象的方法签名。
子接口
接口可以被延伸为数个不同的接口,可以使用上述所描述的方法,举例来说:
publicinterfaceVenomousPredatorextendsPredator,Venomous{//介面主體}
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多重继承,而Predator 及 Venomous 可能定义或是继承相同的方法,比如说kill(Prey prey),当一个类实现VenomousPredator的时候,它将同时实现这两种方法。
示例
有些泛用的Java接口可供参考:
Comparable 拥有一个方法compareTo,用以描述两个对象是否相等,或是其中一个对象大于另外一个对象。泛型允许已经实现的类,其对象可以用来互相比较。
Serializable 是一个marker interface 没有任何接口或是字段,仅有一个空的主体,它被用来表示一个类可以被序列化。它的Javadoc描述了他是如何运作,而且不需要被强制编程。
另见
Mixin
Traits
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
![](https://imgs1.zupu.cn/static/web/img/toplogin.png)
- 有价值
- 一般般
- 没价值
![](https://imgs0.zupu.cn/photos/common/20210831/5f77025c-05aa-4528-8ff4-390397a5720d.png)
![](https://imgs0.zupu.cn/photos/common/20210831/fc60bb85-0172-4554-b1b5-84e226beefd2.png)
![](https://imgs0.zupu.cn/photos/common/20210831/77b1b221-2263-4a50-a438-3fe70c458147.png)
![](https://imgs0.zupu.cn/photos/common/20210901/bf46d3b7-c6b5-4a58-ae45-919cadfc8f58.png)
![](https://imgs0.zupu.cn/photos/common/20210903/71ed74ca-9551-4d33-913e-aed4f1956e48.jpg)
![](https://imgs0.zupu.cn/photos/common/20210901/bf46d3b7-c6b5-4a58-ae45-919cadfc8f58.png)
![](https://imgs0.zupu.cn/photos/common/20210901/106cf47a-2bf9-43b3-8b6f-76bb2958edd9.png)
![](https://imgs0.zupu.cn/photos/common/20210903/71ed74ca-9551-4d33-913e-aed4f1956e48.jpg)
24小时热门
推荐阅读
关于我们
![](https://imgs0.zupu.cn/photos/common/20210901/fc6ee093-f219-47fc-90da-21bd9721b53d.jpg)
APP下载
![](https://imgs0.zupu.cn/photos/common/20210901/ea3c7971-1e11-4045-b81c-880d962d4986.png)
![](https://imgs0.zupu.cn/photos/common/20201105/f86bb195-6306-4041-b306-d17003e00182.png)
{{item.time}} {{item.replyListShow ? '收起' : '展开'}}评论 {{curReplyId == item.id ? '取消回复' : '回复'}}