Java学习笔记之接口

2012年03月04日 分类:学习笔记Java

在C++中一个类可以继承另一个类,也可以继承多个不同的类,但在Java中为了避免多个父类中的方法或属性名字相同,只能继承一个类,但是Java又提出了接口(Interface)这个概念。大致上来说,接口是抽象方法和常量值的定义的集合。本质上说,接口是一种特殊的抽象类,他与抽象类很类似,在接口的里面只有方法和常量值的定义,没有变量和方法的实现,谁继承了接口谁就要实现里面定义的方法。在Java中一个类只能继承一个类,但能继承多个接口,这样我们在Java中也可以实现多继承。

接口仅仅是为了实现多继承吗?多继承只是接口的一种理解形式而已,要知道在接口内定义的都是一些抽象方法或者常量,谁继承了他就要实现这些方法,这和c++中的多继承是完全不同的。在c++中多继承是可以得到父类的所有的方法的,而且都是有具体实现的。所以接口的提出并不是为了像c++中的多继承,而是为了更好地封装类。如果把接口看做父类,实现他的类看做子类,通过父类引用来访问子类对象,也就是通过接口来访问子类对象,这样可以优化设计,使程序变得更简单,其中我们也可以看到一些多态的影子。

一般接口用的比较多的地方就是容器类,在java.util中提供了一系列的容器API。看下面的图。

collection

上面蓝色的都是接口,下面黄色的是实现了这些接口的类,每种容器类都有各自不同的功能,我们在设计的时候要根据具体情况选择。在具体创建对象时我们可以这样:

List list = new ArrayList();
ArrayList list = new ArrayList():

这两种方法都是可以的,第一种表示List通过ArrayList实例出了一个list对象,list可以调用的只要在List接口中定义的方法,也可以说list只能看到List接口的方法,用多态的思想的话,list可以调用子类(ArrayList)的方法,但ArrayList自己的一些方法和变量list是看不到的,这样就能更好地保护数据;第二种就是一般的类的对象的创建。

一般我们用的都是第一种方法,他有什么好处呢。更好地对类进行封装是一个方面,还有一个就是增强程序的可移植性。如果我们在程序的设计过程中要临时改变数据的存储方式,比如把list改成:

List list = new LinkedList();

如果我们一开始是用第二种方法定义的话,在后面的程序中我们可能要修改很多东西,毕竟这是两个不同的类;而如果用第一种方法的话,下面什么都不用改,不会出现任何错误。

这就是接口给我们带来的好处。

作者:wuyuan 本文来自Wuyuan's Blog 转载请注明,谢谢! 文章地址: https://wuyuans.com/2012/03/java-interface