目标:
1.1 编写代码,声明类(包括抽象类和个各种形式的嵌套类) 、接口和枚举。编写代码,包含包和导入语句(包括静态导入)的恰当使用。
1.2 编写代码,声明接口。编写代码,实现或扩展一个或多个接口。编写代码,声明抽象类。编写代码,扩这抽象类。
1.4.1 声明接口
创建一个接口时,是在定义一份契约(contract) ,说明类能够做什么,而不是说明该类将怎么样实现它。接口就是一份契约。例如,可以编写接口Bounceable,实际说明“这是一个Bounceable接口,任何实现这个接口的类类型都必须同意为bounce()和setBounceFactor()方法编写代码。”
可以这样说,将接口看成是100%的抽象类。
但是,尽管抽象类能够定义抽象和非抽象方法,接口却只能有抽象啊方法。接口与抽象类的另一个不同之处在于,接口中定义的方法和变量的生命方式的灵活性很小 。如下这些规则是严格的:
1)所有 的接口方法隐含都是公共的和抽象的。换句话说,在方法声明中不必实际的加入public或abstract修饰符,方法总是公共的和抽象的。
2)接口中定义的所有变量必须是公共的、静态的和最终的。换句话说,接口只能声明长粮,而不能声明实例变量。
3)接口方法一定不能是静态的。
4)因为接口方法是抽象的,所有不能将其标识为final、strictfp或native
5)接口而已扩展为一个或多个其他接口。
6)接口不能扩这除了其他接口之外的任何内容。
7)接口不能实现另一个接口或类。
8)必须使用关键字interface声明接口。
9) 接口类型能够被多态地使用
以下是合法的接口声明:
键入abstract修饰符被认为是多余的。无论是否键入abstract,接口都隐含为抽象的。你需要知道以下两种声明都是合法的,并且功能完全相同:
如果要使接口具有公共访问而不是默认访问的能力,则public修饰符是必要的。
前面已经介绍了接口声明,现在将详细介绍 接口内的方法:
在方法上键入public和abstract修饰符是多余的,因为所有接口方法隐含都是公共的和抽象的。按照这一规则,可以看出如下代码完全等价于上面的接口声明:
必须记住,所有的接口方法都是公共的和抽象的,无论接口定义中有怎样的内容。
请注意用public、abstract的任意组合或没有修饰符声明的接口方法。例如,如果线面5个方法声明是在各自的接口内声明的,则它们是合法的,并且完全相同。
void bounce();
public void bounce();
abstract void bounce();
public abstract void bounce();
abstract public void bounce();
下面的接口方法声明将无法通过编译:
final void bounce();
static void bounce();
private void bonce();
protected void bounce();
1.4.2 声明接口变量
要记住针对接常量的一条重要规则:它们必须总是公共、静态的和最终的。也就是public、static和final。
看看下面的代码有什么问题:
你不能更改常量的值!一旦常量已经被赋值,就永远不能再修改。赋值发生在接口本身内(声明常量) ,因此,实现类能够访问并使用它,但只能将其作为一个只读值。因此,“BAR = 27;”这条赋值语句不会通过编译。