这篇文章主要介绍了Java中实施接口的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
接口是非常有用的概念,可以辅助我们的抽象思考。在现实生活中,当我们想起某个用具的时候,往往想到的是该用具的功能性接口。比如杯子,我们想到加水和喝水的可能性,高于想到杯子的材质和价格。也就是说,一定程度上,用具的接口等同于用具本身。内部细节则在思考过程中被摒弃。
在public
和private
的封装机制,我们实际上同时定义了类和接口,类和接口混合在一起。Java
还提供了interface
这一语法。这一语法将接口从类的具体定义中剥离出来,构成一个独立的主体。
以杯子为例,定义一个杯子的接口:
interface Cup { void addWater(int w); void drinkWater(int w); }
Cup
这个interface
中定义了两个方法的原型(stereotype): addWater
()和drinkWater
()。一个方法的原型规定了方法名,参数列表和返回类型。原型可以告诉外部如何使用这些方法。
在interface中,我们应注意:
不需要定义方法的主体
不需要说明方法的可见性
特别注意第二点,interface
中的方法默认为public
。正如我们在封装与接口中讲到的,一个类的public方法构成了接口。所以,所有出现在interface
中的方法都默认为public。
我们可以在一个类的定义中实施接口,比如下面的MusicCup (可以播放音乐的杯子):
class MusicCup implements Cup { public void addWater(int w) { this.water = this.water + w; } public void drinkWater(int w) { this.water = this.water - w; } private int water = 0; }
我们用implements
关键字来实施interface
。一旦在类中实施了某个interface
,必须在该类中定义interface
的所有方法(addWater
()和drinkWater
())。类中的方法需要与interface
中的方法原型相符。否则,Java
将报错。
在类中可以定义interface
没有提及的其他public
方法。也就是说,interface
规定一个必须要实施的最小接口。比如下面的waterContent
()方法就没有在Cup
接口中规定原型:
class MusicCup implements Cup { public void addWater(int w) { this.water = this.water + w; } public void drinkWater(int w) { this.water = this.water - w; } public int waterContent() { return this.water; } private int water = 0; }
我们使用了interface
,但这个interface
并没有减少我们定义类时的工作量。我们依然要像之前一样,具体的编写类。我们甚至于要更加小心,不能违反了interface
的规定。既然如此,我们为什么要使用interface呢?
事实上,interface
就像是行业标准。一个工厂(类)可以采纳行业标准 (implement interface
),也可以不采纳行业标准。但是,一个采纳了行业标准的产品将有下面的好处:
更高质量: 没有加水功能的杯子不符合标准。
更容易推广: 正如电脑上的USB接口一样,下游产品可以更容易衔接。
如果我们已经有一个Java
程序,用于处理符合Cup
接口的对象,比如领小朋友喝水。那么,只要我们确定,我们给小朋友的杯子(对象)实施了Cup
接口,就可以确保小朋友可以执行喝水这个动作了。至于这个杯子(对象)是如何具体定义喝水这个动作的,我们就可以留给相应的类自行决定 (比如用吸管喝水,或者开一个小口喝水)。
在计算机科学中,接口是很重要的概念。比如任何提供UNIX接口的操作系统都可以称作UNIX系统。Linux
,Mac OS
,Solaris
都是UNIX
系统,它们提供相似的接口。但是,各个系统的具体实施(源代码)互不相同。Linux
是开源的,你可以查看它的每一行代码,但你还是不知道如何去编写一个Solaris
系统。
相同的UNIX接口:
一个类可以实施不止一个的interface
。比如我们有下面一个interface
:
interface MusicPlayer { void play(); }
我们再来考虑MusicCup
类。MusicCup
可以看做播放器和杯子的混合体。
所以MusicCup
应该具备两套接口,即同时实施MusicPlayer
接口和Cup
接口:
class MusicCup implements MusicPlayer, Cup { public void addWater(int w) { this.water = this.water + w; } public void drinkWater(int w) { this.water = this.water - w; } public void play() { System.out.println("la...la...la"); } private int water = 0; }
最后,可以尝试将本文中的interface
和类定义放在同一个文件中,并编写Test
类,运行一下。
感谢你能够认真阅读完这篇文章,希望小编分享的“Java中实施接口的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。