- p223:通常将接口声明为
public
,此时接口中所有方法自动成为public
。接口不能包含实例字段。 p233:从
Java5
开始,Comparable
接口已经提升为一个泛型类型:public interface Comparable<T>
{
int compareTo( T other );
}
在实现
Comparable<Employee>
接口的类中,必须提供以下方法:int compareTo(Employee other)
- p228:如同使用
instanceof
检查一个对象是否属于某个特定类一样,也可以使用instanceof
检查一个对象是否实现了某接口。 - p228:接口中可以声明变量,所有变量自动设为
public static final
,无需写明。 - p230:在
Java8
中允许在接口中增加静态方法,从而为实用工具提供容身之处,不必用一个新类存放他们。 p230:从
Java 8
开始可以为接口方法提供一个默认实现,必须用default
修饰符标记这样一个方法。如果一个类只想实现一个接口的一部分,默认方法就很有用:public interface Iterator<E>
{
E next();
boolean hasNext();
default void remove() {
throw new UnsupportedOperation("remove");
}
. . .
}
- 如果要实现一个只读的迭代器,就不用实现
remove
方法。 - 默认方法的一个重要用法是“接口演化”。如果为接口新加一个方法,并把这个方法声明为默认方法,那么其它的旧代码就不需要修改。
- p232:如果一个类实现了多个接口,同时继承了一个类,在接口和超类中有相同签名的方法,这样解决命名冲突:
- 超类优先。这样就保证了与
Java 7
的兼容。 - 如果两个接口有相同签名的方法,而且只要有一个实现了默认方法,就必须在子类中覆盖: ```java interface Person { default String getName() { returun “”; } }
- 超类优先。这样就保证了与
interface Named { default String getName() { return getClass.getName() + “_” + hashCode(); } }
class Student implements Person, Named { public String getName() { return Person.super.getName(); } . . . }
8. **p239**:`Cloneable` 接口怎么用。即使 `clone` 的默认(浅拷贝)实现能够满足要求,还是需要实现 `Cloneable` 接口,将 `clone` 重新定义为 `public` ,再调用 `super.clone()` :
```java
class Employee implements Cloneable
{
public Employee clone() throws CloneNotSupportedException
{
return (Employee) super.clone();
}
}
- p240:所有数组类型都有一个公共的
clone
方法。