使用接口引用

你可能会对可以声明接口类型的引用变量感到惊讶.换句话说,可以创建接口引用变量.这样的变量可以引用实现他的接口的任何对象.当通过接口引用调用一个对象上的方法时,将会执行此对象实现的那个版本方法.这个过程类似于使用超类引用去访问子类对象.
下面的例子演示了这一过程,他使用同一个接口引用变量调用Bytwos和ByThree对象上的方法:
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;
    }
}


class ByThree implements Series
{
    int start;
    int val;

    ByTwos()
    {
        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;
    }
}

public class test2
{
    // @param args
    public static void main(String args[])
    {
     ByTwos twoOb = new ByTwos();
     ByThree threeOb = new ByThree();
     
     Series ob;
     
     ob = twoOb;
     System.out.println("ByTwos value is :  "+ob.getNext());
     ob = threeOb;
     System.out.println("BtThree value is :  "+ob.getNext());
    }
}
在main()中,ob被声明为接口Series的引用,这意味着他可以用于存储任何实现Series的对象的引用.在本例中,他用于引用twoOb和threeOb,他们分别是ByTwos和ByThree类型的对象,都可以实现Series.接口引用变量仅仅能够识别其接口说声明的方法.因此,ob不能用于访问任何其他可能由该对象支持的变量或方法.