关于java中为什么使用接口的解析及其理解

一、为什么项目中需要使用接口?

在项目中,有一些功能,不仅仅是一个类去实现,即有很多地方有用到,大家需要统一标准。所以需要用接口,这样大家同时实现一个接口,就能够统一规范。在接口中只是定义了基本的方法名,具体的实现交给实现类。

统一标准之后的下一件事情,就是多态。多态的实现,是使用了动态绑定技术,这里不做进一步展开。只需要知道在C和C++中,是前期绑定,也就是在编译前,就已经知道了具体执行哪些代码;而在java中,是后期绑定或者说是动态绑定,也就是在程序执行的那一刻,才会知道执行什么代码。而动态绑定技术,是实现多态的重要条件。

统一标准后,父类声明,子类实例化,调用接口方法,就可以产生不同的结果。比如手机和电视都实现了播放功能。这个时候:

Usb u1=new Phone();
Usb u2=new Tv();
u2.play();

这个时候控制台输出的就是不同的语句了,u1输出手机播放的方法,u2输出电视的播放方法。

我们来想一想,这样做有什么好处?

1.代码简洁

如果我有100个播放设备,那么只要继承Usb接口,实现play()方法,并且按照上述的方式去调用,就可以得到不同的效果;如果我们不实现接口,而是仅仅在类里面自己写play方法,那么我们调用的时候就需要指名具体是哪一个类,而程序运行的时候如果不能明确写明是哪一个类,处理起来就非常麻烦。

2.实现可以多种多样&维护成本低

再比如,有一个叫comparable的接口。数字可以比较,那么自定义的类怎么比较呢?实现了接口,我们就可以用实现类去实例化父类的comparable接口,直接调用compareTo方法比较即可(正面);如果我们不用,那么在写代码的时候就要自己记住去写compareTo方法,并且调用的时候,直接指定清楚类名。并且,如果有100个类都需要比较,人会犯错,可能别人写的不是compareTo方法,而是改了个名字,可能别人比较不再是规定好的返回boolean类型的结果,可能。。。。这样就给代码的迭代、维护带来很高的成本。

3.降低代码的耦合性

假设张三、李四同时开发一个模块。张三负责写收银员类和方法,李四负责写计算器类和方法。如果没有接口,那么张三写好了之后,需要调用李四的方法,想当然的认为方法名是jisuan(),结果却发现李四的方法名是countMoney(),这个时候就需要去修改代码了,带来了不必要的麻烦(反面)。

如果在工作刚刚开始的时候,张三提前想到了这一步,规定了,李四,你写计算器类的时候,需要实现我的Icount接口,接口中规定了你需要实现一个计算的方法,按照我的方法名,和返回类型,返回给我正确的方法,我直接在我的代码中调用即可。

综上所述,接口是有很多好处的。接下来,我们应该如何理解接口呢?

二、接口的理解

1.接口就是个招牌

比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC,然后你就知道今天中饭有着落了。

KFC就是接口,我们看到了这个接口,就知道这个店会卖炸鸡腿(实现接口)。
那么为什么我们要去定义一个接口呢?这个店可以直接卖炸鸡腿啊(直接写实现方法),是的,这个店可以直接卖炸鸡腿,但没有挂KFC的招牌,我们就不能直接简单粗暴的冲进去叫服务员给两个炸鸡腿了。

要么,我们就要进去问,你这里卖不卖炸鸡腿啊,卖不卖汉堡啊,卖不卖圣代啊(这就是反射)。很显然,这样一家家的问实在是非常麻烦(反射性能很差)。
要么,我们就要记住,中山路108号卖炸鸡,黄山路45号卖炸鸡(硬编码),很显然这样我们要记住的很多很多东西(代码量剧增),而且,如果有新的店卖炸鸡腿,我们也不可能知道(不利于扩展)。

2.接口在日常生活中的映射

日常生活中,两个实体之间进行连接的部分称为接口。如电脑和U盘连接的标准USB接口。接口可以确保不同实体之间的顺利连接。如不同的电脑厂家和U盘厂家只要按照相同的USB接口进行生产,那么所有的电脑和U盘就可以顺利的连接起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值