创建一个接口时,是在定义一份协约(contract),说明类能够做什么,而不是说明该类怎样实现它。接口就是一份协约。例如,可以编写接口Bounceable,实际说明“这是一个Bounceable接口,任何实现这个接口的类都必须同意为bounce()和setBounceFactor()方法编写代码。”

通过为Bounceable定义接口,希望作为Bounceable对待的所有类都能够轻松实现Bounceable接口,并为该接口的两个方法提供代码。


  可以将接口看成100%的抽象类。但是,尽管抽象类能够定义抽象和非抽象的方法,接口却只能有抽象方法。接口与抽象类的另一个不同之处在于,接口中定义的方法和变量的声明方式的灵活性很小。如下这些规则是严格的:

*所有接口方法隐含都是公共的和抽象的。换句话说,在方法 声明中不必实际地键入public或abstract修饰符。方法总是公共的和抽象的。

*接口中定义的所有变量必须是公共的、静态的和最终的。换句话说,接口只能声明常量,而不能声明实例变量。

*接口方法一定不能是静态的。

*因为接口方法是抽象的,所有不能将其标识为final、strictfp或native。

*接口可以扩展一个或多个其他接口。

*接口不能扩展除了其他接口以外的任何内容。

*接口不能实现其他接口或类。

*必须使用interface关键词声明接口。

*接口类型能够被多态地使用。