开始学习java知道接口是一个类所具有的方法特征的集合,是一种逻辑上的抽象,它里面定义的方法没有方法体,主要作用就是解决了java类只能单根继承的不足。如:我们可以定义一个跑车接口SportsCar:
/**
* 定义一个跑车接口
*
*/
public interface SportsCar {
//发动机类型:石油驱动
public void oilEngine();
}
再写一个奔驰汽车类Benz,实现SportsCar接口
/**
* 奔驰汽车
*
*/
public class Benz implements SportsCar {
public void oilEngine() {
System.out.println("采用石油驱动");
}
}
像这样我们也可以把SportsCar定义为一个类,让Benz类去继承它,也可以实现,但如果科技进步了,人类环保意识加强了,出现了绿色环保车型,即采用太阳能作为发动机,而奔驰公司也为了体现这点,给汽车装上了双引擎系统。那么再定义一个GreenCar类,让Benz去继承就不行了,因为java是单根继承,所以只能把GreenCar定义为一个接口:
/**
* 绿色环保车接口
*
*/
public interface GreenCar {
//发动机类型:太阳能驱动
public void solarEngine();
}
让Benz类同时实现这两上接口,从而使汽车具有双引擎系统的功能:
/**
* 奔驰汽车
*
*/
public class Benz implements SportsCar ,GreenCar{
public void oilEngine() {
System.out.println("采用石油驱动");
}
public void solarEngine() {
System.out.println("采用太阳能驱动");
}
}
通过接口提供了关联以及方法调用上的可插入性,当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉,就像我们将一个60G硬盘换成一个160G的硬盘,计算机其他地方不用做任何改动,而是把原硬盘拔下来、新硬盘插上就行了,因为计算机其他部分不依赖具体硬盘,而只依赖一个IDE接口,只要硬盘实现了这个接口,就可以替换上去。
虽然接口的好处是毋庸置疑的,可是自己在实际项目开发过程中很少体现面向接口的编程思想,很多时候自己在接口里面定义了一个方法,马上就把想到怎样去实现它,其实自己的注意力一直在实现层,有时候觉得接口这玩意儿有个屁用。其实这是自己的误区,没有真正从一个高度理解接口的内涵,面向接口编程体现的是一种设计,如果一个项目没有好的设计,就算成功了它的扩展性也不好。
那么面向接口编程到底有什么好处呢?
1.使用接口编程,易于程序的扩展
理解面向接口编程一个很好的实例就是java自带的数据库连接接口的定义,假如我们现在要写一个连接数据库的类给用户使用,一般的解决办法是给每个数据库写一个类,然后根据用户使用的数据库类型确定使用具体的类,这样的话必然造成代码的重复,另外也不利于系统的扩展,因为你根本不知道用户使用什么样的数据库,可能是MySQL,可能是Oracle,大家都知道eclipse它可以连接很多数据库,只要你把相应的驱动包加进来,就可以实现连接多种数据库了,想一想这是为什么,因为java里面把Connection定义为了接口,接口是什么,在这里其实就一个标准了,真正的实现其实是交给了数据库的开发方,这个实现类中实现了Connection接口,不信看驱动包中Connection类的源码:
public class Connection extends ConnectionProperties implements
java.sql.Connection {
}那么不管以后还出现什么样的数据库,只要它实现了Sun公司制定的个接口就都可以连接的上,这样让eclipse得到的广泛的应用
2.降低了程序之间的耦合性
大家玩过游戏的都知道,很多游戏从它发布开始,就会每隔一段时间进行更新,有时还会增加游戏角色等,使玩家时刻保持新鲜感。那么游戏里面肯定是定义了很多的接口,我增加一个角色只要实现这个角色的接口就可以了,只要通过编译后,就可以把它加到服务器中去就新增了一角色,你想要是没有接口,这游戏还能玩的下去吗?
3.便于项目的模块化管理,不形成编译的依赖性
因为现在都讲究团队合作精神,做项目也是一样,很多项目都不可能由你一个人来完成,肯定是很多人分工合作,分模块的来完成工作,每个模块都是独立的,尤其到项目快完成的时候并不要把所有模块组合起来编译一把,然后再运行,只要每个独立模块编译通过就OK了。
虽然自己已经感觉到了不少面向接口编程的好处,但这还只是自己的心得,离真正把这种思想贯彻到编码设计中感觉还是有不少距离,这是一种设计思想,思想是最难的把握的, 对于原理性的东西还要自己好好去琢磨,有自己真正的见解才是真的懂了。
分享到:
相关推荐
Java 的核心是面向对象编程.所有的java程序都是面向对象的。 以前总听老师说c语言是...面向对象的编程围绕它的数据(即对象)和为这个数据严格定义的接口来组织程序。面向对象的程序实际上是用数据控制对代码的访问。
何为编程.zip
首先解释了何为面向对象以及为什么要在程序中引入此类概念,进而详细探讨了类与对象的定义与使用、面向对象的三个重要特性(封装、继承、多态)、构造器和魔法方法等功能的实现。同时给出了具体的实例来帮助理解面向...
在深入探讨PHP面向对象编程之前,我们先来了解一下何为面向对象编程(OOP)。面向对象编程是一种编程范式,它使用“对象”——即数据和与数据相关的操作的封装体——来设计软件。这种编程方式强调数据的封装、继承和多...
论何为教育.pdf
30张PPT截图揭秘何为工业4.0
DVI接口是何为?DVI接口定义、类型、图片 在计算机领域中,DVI(Digital Visual Interface,数字视觉接口)是一种常用的视频接口标准。DVI接口是由Silicon Image、Intel、Compaq、IBM、HP、NEC、Fujitsu等公司共同...
配置NAT时,需要对网络拓扑、地址池、ACL(访问控制列表)等有深入理解,确保NAT配置正确无误,并能够根据需要进行端口转发设置。同时,定期检查NAT转换表和排查NAT相关的故障也是网络管理员的重要职责。 总的来说...
新浪微博何为舟-自动化策略生成的思考与实践.pdf
我们经常说C语言是面向过程的,而C++是面向对象的,然而何为面向对象,什么又是面向过程呢?不管怎么样,我们最原始的目标只有一个就是实现我们所需要的功能,从这一点说它们是殊途同归的。过程与对象只是侧重点...
【Java编程思维1】这本书是面向初学者的编程入门教程,旨在帮助读者理解计算机科学的基础概念,学会如何像计算机科学家一样思考,并掌握编程解决问题的能力。书中以Java语言为载体,逐步引导读者熟悉编程世界。 1. ...
#### 一、理解编程的本质 编程,即编写程序,是通过特定的编程语言向计算机发出指令,以实现预定的功能或解决问题的过程。编程的本质在于逻辑思维与问题解决能力的体现。一个优秀的程序员不仅要掌握一门或多门编程...
在JavaWeb中,Servlet是一个核心概念,对于初学者来说,理解Servlet的含义和作用至关重要。 1. **Servlet简介** Servlet是Java编写的服务端组件,主要用于扩展Web服务器的功能。它们接收来自客户端(通常是浏览器...
机器视觉是一种技术,它使计算机和自动化设备能够“看”并理解现实世界,进而执行基于图像的任务。在本文中,我们将深入探讨机器视觉的基本概念、组成部分、应用领域以及其在现代科技中的重要性。 首先,我们要理解...
何为区块链技术
何为行为财务学
虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程。至于何为面向对象,在此就不详说了。面向对象程序设计本身就很值得深入学习,如要了解,请参阅网上其他的资料。 面向对象最重要的概念就是类...
# 一、JavaWeb介绍 ## 1、Web ...是建立在**Internet**上的一种网络服务,为浏览者在Internet上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超级链接将Internet上的信息节点组织成一个互为关联的...
- **XP**:规定了诸如测试驱动开发(TDD)、结对编程等严格的工程实践。 - **Scrum**:对工程实践不做强制要求,强调团队自主选择合适的方法。 ### 总结 敏捷开发和Scrum都是为了提高软件开发效率和产品质量而设计...
在Spring框架中,AOP(Aspect Oriented Programming,面向切面编程)是一个核心概念,它扩展了OOP(Object-Oriented Programming,面向对象编程)的思维,将关注点分离,使得我们可以更灵活地管理横切关注点,如日志...