接口被定义后,一个或多个类可以实现该接口.要想实现一个接口,需要在类定义中包含implements子句,然后创建该接口口需要的方法.包括implements子句的类的一般形式如下所示:
class classname extends superclass implements interface { //class body }
要想实现多个接口,可以用逗号分开接口.当然extends子句是可选的.
实现接口的方法必须被声明为public.同样,实现方法的类型签名必须与接口定义中指定的类型签名完全匹配.
下面是一个前面介绍过的实现Series接口的例子.他创建了一个名为ByTwos的类,ByTwos类生成一个数列,其中每个数值都比前一个数值大2:
public interface Series { int getNext(); void reset(); void setStart(int x); } class ByTwos implements Series { int start; int val; ByTwos() { start = 0; val = 0; } public int getNext() { val += 2; return val; } public void reset() { val = start; } public void setStart(int x) { start = x; val = x; } }
实现接口的类定义他们自己的附加成员是允许的,而且也很常见.例如,下面的ByTwos版本增加了方法getPrevious(),他返回前面的值:
class ByTwos implements Series { int start; int val; int prev; ByTwos() { start = 0; val = 0; } public int getNext() { val += 2; return val; } public void reset() { val = start; } public void setStart(int x) { start = x; val = x; } int getPrevious() { return prev; } }
如上所述,任意数量的类可以实现一个接口,例如,下面有一个名为ByThree的类,他产生了一个3的倍数数列:
class ByThree implements Series { int start; int val; ByThree() { start = 0; val = 0; } public int getNext() { val += 3; return val; } public void reset() { val = start; } public void setStart(int x) { start = x; val = x; } }
更重要的一点是,如果一个类包含一个接口,但是没有完全实现那个接口定义的方法,那么该类必须声明为抽象类.不能为这样的类创建对象,但可以将该类用做抽象超类,允许子类提供完整的实现.