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