12.Java的标记接口
一.什么是标记接口?
概念:没有任何方法的接口是标记接口。并不是Java的语法,而是一种设计理念。
例如下面是ArrayList的源码:
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
ArrayList实现了RandomAccess接口、Cloneable接口和Serializable接口。然而我们可以发现,这三个接口里面什么都没写,例:
public interface RandomAccess {
}
RandomAccess:可随机访问。RandomAccess仅仅是一个标记,用于标记该类可以被随机访问。
二. Cloneable接口
- 对象在调用clone()方法时,类必须实现Cloneable接口。否则当调用clone()时会抛出CloneNotSupportedException异常。
- Cloneable接口是不包含任何方法的!其实这个接口仅仅是一个标志,而且这个标志也仅仅是针对 Object类中clone()方法的,如果clone类没有实现Cloneable接口,并调用了Object的clone()方法(也就是调用了 super.Clone()方法),那么Object的clone()方法就会抛出CloneNotSupportedException异常。