接口
接口的声明:
Java接口描述一组方法,对象可以调用这些方法,告诉对象执行某个任务或者返回某种信息。
Java中接口的声明以关键字interface开始,只能包含常量和抽象方法,不能有具体的实现。
与类不同的是,所有的接口成员都必须是公共的,并且接口不能指定任何的实现细节,如具体的方法和实例变量。
接口中声明的所有方法都隐含为public和abstract类型,而所有字段都隐含为public、static和final类型。根据《java语言规范》第九章,声明接口的方法时不带关键字public和abstract是一种合适的风格,因为在接口方法的声明中它们是多余的,类似的,声明常量的时候不带public、abstract和final关键字,它们也是冗余的。
接口的使用:
使用接口时,具体类必须指明它实现的接口,并且必须用接口声明中的签名来声明接口中定义的每个方法。类指定实现某一个接口时需要使用关键字implements后接接口的名称。
实现了接口却没有实现接口中每一个方法的类是一个抽象类,必须声明为abstract类型。
接口声明:
public interface Test
{
int get();
void set();
}
类指定接口:
public class A implements Test
{
@Override
public int get()
{
}
@Override
public void set()
{
}
}
为什么要使用接口:
首先要了解Java继承和接口的区别,Java中规定一个类只能继承一个超类,但是一个类可以实现多个接口。继承更多的是表现is-a的关系,例如法拉利是一辆车,麻雀是一种鸟,二哈是一种狗。那么接口呢,接口更多的是变现这个类具有什么功能。优快云中有一个帖子把接口形容成类的干爹,而把继承形容成类的亲爹,你可以有多个干爹,但是你只能有一个亲爹。在使用继承的过程中,超类中可以有具体实现的方法,而接口中所有方法都是只有签名,没有具体的实现。继承更多的原因是可以实现代码的复用,比如我可以先写一个汽车的概括类,这样以后要再去更具体的描述某种汽车只需要继承这个超类,然后在这个超类上进行增改就可以了。而接口的存在就好比是你电脑上的USB接口一样,我只需要我的电脑提供一个这样的USB接口,然后别人的U盘是怎么生产制造的我完全不去管,我只需要在人家的U盘连接到我的U盘时,我可以读写数据就可以了,甚至你也可以不是U盘,键盘鼠标等都是可以通过这个进行连接,但是有一点就是你的外设一定要按照我的规范去实现,这样你才可以连接到我的电脑。
所以说接口是一种功能或者行为的规范,它不需要去在意类的具体实现,只需要提供方法的签名就可以了。
比如我开发了一个类似于支付宝的软件,那么如果别人的软件要使用我的支付软件进行付款,就需要知道怎么样才能让他的软件和我的软件连接在一起。如果是一个人,我当然可以直接告诉他怎么连接我的软件,但是如果是一群人呢,我总不能一个一个的去详细解答,这时候我可以写一个接口来告诉他们怎么连接我的支付软件。我可以在我的接口中写两个方法,一个方法返回付款的原因,另一个方法返回付款金额,这样别人只需要在他们的类中实现这个接口的两个方法就可以使用我的软件。
软件接口:
public interface Pay
{
public int getMoney();//获取金额
public String getReason();//获取付款原因
}
公司A实现Pay接口:
public A implements Pay
{
@Override
public int getMoney()
{
return 60;
}
@Override
public String getReason()
{
String str="购买了A公司D产品";
return str;
}
}
公司B实现Pay接口:
public B implements Pay
{
@Override
public int getMoney()
{
return 200;
}
@Override
public String getReason()
{
String str="支付当月水电费。";
return str;
}
}
我的付款软件:
public class MyPro
{
//获取账单信息并输出
public void dealBill(Pay pay)
{
System.out.println(pay.getMoney);
System.out.println(pay.getReason);
}
public static void main(String[] args)
{
//获取A和B两个公司的账单
Pay a=new A();
Pay b=new B();
MyPro mp=new MyPro();
mp.dealBill(a);
mp.dealBill(b);
}
}
通过以上的演示我们就可以看出,我的软件只要提供了接口,其他的软件怎么实现我完全不用去管,只要他们实现了我的接口,就可以连接到我的软件并使用我的软件的付款功能,这就是接口的作用。