实现接口

接口被定义后,一个或多个类可以实现该接口.要想实现一个接口,需要在类定义中包含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;
    }
    
}
更重要的一点是,如果一个类包含一个接口,但是没有完全实现那个接口定义的方法,那么该类必须声明为抽象类.不能为这样的类创建对象,但可以将该类用做抽象超类,允许子类提供完整的实现.