在Java的学习中,学了这么久才发现面向接口编程的好处很多,其中最后重要的莫过于可以拥抱变化。在了解到接口的设计中,才发现自己之前对接口的真正意义上的功能只了解一半。
大多编程的经验下,Java中的接口是用于表示一种标准,只定义了一些标准,一些方法的声明而没有实现,表示将方法名暴露给远程客户端。如USB接口等。这便是大家所熟悉的,也是常用的接口功能。但是接口中还有一种重要的功能,即接口表示一种能力。
接口的另一种功能中,表示一种能力,整个接口内部没有任何方法或属性,是一个内容为空的接口,但是该接口代表了一种能力。常以able结尾。如java.io包中的Serializable接口的设计,该接口代表一种能力,表示可以序列化,实现了该接口的类则说名该类可以序列化,这对与对象序列化、远程传输有着重要作用。没有实现该接口则不具有序列化的能力。在JDK中该接口的源码如下:
/*
* @(#)Serializable.java 1.25 05/11/17
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.io;
public interface Serializable {//该接口没有任何内容仅表示一种能力。
}
另一个例子。Clonable,该接口表示可克隆的,表示一种克隆的能力,实现了该接口的类说明该类可以克隆,可以调用Object.clone()方法进行克隆,否则是不可克隆的,若调用该方法,则会抛出ClassNotSupportedException异常。在JDK中该接口的源码如下:
/*
* @(#)Cloneable.java 1.17 05/11/17
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.lang;
public interface Cloneable { //该接口没有任何内容,表示一种能力。
}