接口变量相当于C++里头的指针一样,Java里头的的变量都是引用。
接口引用可以指向任何继承自它的实现类,所以运行时实际调用的是它指向的实例。
A implements B
C implements B
则
B b = new A();//此时b指向A实例
b = new C();//此时b改成指向C实例,A被JVM回收掉。
b.save();//此时调用的就是C实现的操作
C caller1 = new C();
caller1.setB(new BImp1()); //C的B属性是B接口类型
caller1.getB().save(); //调用BImp1的save
C caller2 = new C();
caller1.setB(new BImp2());
caller1.getB().save(); //调用BImp2的save