你的位置:首页 > Java教程

[Java教程]Java接口面面观

在介绍接口之前,我们先了解了解它的兄弟“继承”先生。

 

在面向对象编程中,继承避免了多个类间重复定义共同行为,既帮我们节约了时间也节约了系统资源。看起来继承对我们有莫大的帮助,但是实际编程中我们应该少用继承。为什么呢?

 

其中的原因很多,笔者觉得最大的一个原因是继承强调了一种"is a"的关系,即“是一种”的关系。

 

比如说麻雀是一种鸟,鲫鱼是一种鱼。这就会带来一个问题了,假设有一个东西它和鸟一样会飞,像鱼一样能在水里游,那它就一定是一种鸟一种鱼么。答案当然是否定的。

 

这样如果在程序中,多个类有同一种行为,能把它们都继承自一个父类么?如果你不怕天下大乱,我想你可以试试看。

 

不过不用怕,还好接口来了。网上看到一个对接口的描述,我觉得非常不错。

 

他说接口是一个标准,生活中有很多接口。比如说水龙头管接口、电源接口等。以前水龙头生产商在采用接口之前,厂商要同时提供水龙头和下水管,他们是一体的不能变更。同时也只适用于他的一种产品。而有了接口之后,厂商就不用管他的下水管如何设计了,只用按照接口标准来生产水龙头,完成后直接接到下水管上就可以了。这就是面向接口,这样你的下水管就可以使用所有的符合下水管标准的水龙头,而不是之前的一种水龙头。很明显现在更换水龙头也更加的方便。

 

接口是对一种行为的定义,不同类可以有同一种行为。这样使得接口和实现分离,适用于团队的协作开发。主要为了实现松散耦合的系统,便于以后升级扩展。

 

另外继承就像是类的亲爹,而接口是类的干爹。亲爹只有一个,而干爹可以认很多个。其实也很好理解,继承强调"is a"关系,当然只能是一种。而接口定义的是行为,一个类必然可以有多种行为。

 

具体语法层面,定义行为使用interface关键字,且接口中的方法不能操作必须是抽象的,直接表示为abstract,且一定是public。

如public interface Swimmer{

      public abstract void swim();

}

 

使用接口必须使用implements关键字,此时对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract.

如public abstract class Fish implements Swimmer{

...

}

 

另外接口可以继承别的接口,也可同时继承两个以上的接口,同样也是使用extends关键字,代表了继承父接口的行为。

 

接口的使用大部分都在比较大的项目中,因此在初学编程时并没有机会接触到接口,随着学习的深入相信会对接口的使用有更多的感触。