接口
一、此接口非彼接口
接口有两种定义:一种是我们常说的API(application program interface)应用程序接口,这类接口是有应用服务提供商或第三方软件厂商提供。如Java就提供了不少非常强大的API,各种开放应用平台也纷纷提供自己的API接口供程序员使用。第二种就是我们接下来重点要说的Java语言规范中提供的一种特性(Interface)。
二、什么是接口(Interface)
通俗的讲接口就是一种规范,生活中的一个例子就是我们的每个人都在用的插线板,插线板定义了有两孔的插孔,三孔插孔、或者其他特殊的插孔,各种电器只要按照插线板的规范去制作就肯定可以接上电源。而插线板也根本不需要知道具体知道是什么东西接在我这个插孔中。
在Java语言规范中对接口的定义:一个接口就是一些方法特征的集合,所谓的方法特征就是指该方法只有描述而没有具体实现怎么做,好比一个乘法计算的方法只是申明一下,但并不去解决怎么把这个乘法算法的过程和结果写出来。接口就是一种抽象化的表现,但他比抽象类更抽象。(了解抽象类可以看以后写的博客或者查阅其它资料)。我们可以把电影中角色和演员分别比作接口和具体的实现类。
三、接口定义:
public interface Expression{ public static final int num1 =1; public static final int num2 =2; boolean getResult(); }
四、接口的一些特性:
1、接口中的方法的声明默认是public abstract修饰的。
2、接口中可以包含有public static final 修饰的常量。
3、一个类可以实现多个接口。
五、接口的用途:
接口在Java语言中有着举足轻重的地位,几乎所有框架的设计都离不开接口,那它究竟用什么做用呢?
其实接口是对Java多态特性一种很好的实现。我们来设想有这样一个情景:老师一天给学生分配一个任务就是为一个软件实现一个乘法的功能,于是该同学很快就开始写好了如下一个类:
public class Client{ public static void cacl(int num1,int num2){ System.out.println(num1*num2); } }
如果系统不再需升级,此方法无疑是最好的一种方式,但是我们总是会不安于现状,突然几天后老师根据客户的需要又要求我们实现一个除法的功能,我们只好勉为其难的添加了一个新类,然后修改了下Client,变成了如下:
public class Client{ public static void cacl(int num1,int num2,String opt){ if("*".equals(opt)){ System.out.println(num1*num2); }else if("/".equals(opt)){ Sysetm.out.println(num1/num2); } } }
设想一下,如果以后老师还有更多的需求,我们就的写上长长的一段if else 语句来判断了,这可不是一个很好的设计。于是乎接口派上用场了。看看下面的代码:
public interface Expression{ int result(int num1,int num2); } public class multiExpression implements Expression{ public int result(int num1,int num2){ return num1*num2; } } public class Division implements Expression{ public int result(int num1,int num2){ return num1/num2; } } public class Client{ public static void cacl(Expression exp,int num1,int num2){ System.out.println(exp.result(num1,num2)); } }
我们发现Client类中只有一行代码了,非常的精简,以后在有其他的计算需求,我只需写一个新的类就行。根本的不用去修改Client类了。
接口同时使用在很多种设计模式上。(最后写完这文章,发现一点都不深入,暂且适用于入门读者吧)。