好处:
接口和实现分离了,适于团队的协作开发。
更具体的优点:可以参看IDP原则。
J2EE中的API规范基本上都是接口,由各应用服务器来实现,比如:WebSphere按照这个接口实现自己的,WebLogic也按照这个接口实现自己的,作为开发者来说我们根本就不用去管谁是怎样实现的,只要按照J2EE的API
来写就可以了,根本用不着导入它们的实现包,实际上具体的是由它们自身完成了。
接口说白了,也就是定死了一个框,具体的是糊红纸还是糊黑纸我们都用不着去管的,我们只要知道它是个框,提供
了哪些方法就够了。举
个简单的JDBC的例子吧,比如有个BaseDao接口,现在有MySQLDao实现了一个(我们可以把具体的实现类配在配置
文件中,再通过反射进行实例化),也就类似这样的:
BaseDao dao = (BaseDao)(Class.forName(Config.getDaoName()).newInstance());
.其中Config.getDaoName()可以获得配置文件中的配置,比如是:com.bao.dao.impl.MySQLDao。
要改用Oracle了,这样我们只要按BaseDao的定义,再实现一个OracleDao就可以了,
再将配置文件中的配置改为:com.bao.dao.impl.OralceDao就可以了,而在已经写好的代码中,我们可以一行不
改的进行了数据库移植,这个就是面向对象设计原则中的“开-闭原则”(对增加是开放的,对修改是封闭的)
但这只是理论上的,现实中很难做到的。
首先给出例子:
public interface IA {
public void read();
public void write();
}
public class AA implements IA{
public void read(){
System.out.println("AA的read方法");
}
public void write(){
System.out.println("AA的write方法");
}
}
public class BB implements IA{
public void read(){
System.out.println("BB的read方法");
}
public void write(){
System.out.println("BB的write方法");
}
}
public class CC {
public static void main(String[] args) {
IA ia = new AA();
ia.read();
ia.write();
IA ib = new BB();
ib.read();
ib.write();
}
}
输出:
AA的read方法
AA的write方法
BB的read方法
BB的write方法
JAVA提倡面向接口编程,不要面向实现编程。
AA、BB实现了IA
AA、BB的read()、write()方法由不同人员完成,CC类为测试类,CC想用谁的方法只需实现谁就行。
接口定义了一种行为规范 可以被不同的类实现
比如鸟和飞机还有超人 都会飞 但是三者之间没有什么直接的联系 不会有公共的父类 只能用飞行的接口来实现
接口本身不能实例化 但是可以用接口声明对象来指向实现了接口类的引用
比如显示飞行的速度 可以用飞行接口来声明 而实例化的对象可以用鸟 飞机和超人 这样 调用显示速度的方法时 不需要三个类分别调用 而直接用接口就可以了
这样降低了类与调用它们的类之间的联系
1.更加抽象,更加面向对象
2.提高编程的灵活性
3.提高可维护性
节省代码,可以帮助我们偷懒.......