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
b b = new bimp2(); b.save(); 这样就掉了 bimp2 的save方法了。
发表于:2007-06-19 22:01:2319楼 得分:0
该回复于2007-12-28 11:22:47被管理员或版主删除
发表于:2007-06-20 09:15:3620楼 得分:3
接口变量相当于c++里头的指针一样,java里头的的变量都是引用。 接口引用可以指向任何继承自它的实现类,所以运行时实际调用的是它指向的实例。 a implements b c implements b 则 b b = new a();//此时b指向a实例 b = new c();//此时b改成指向c实例,a被jvm回收掉。 b.save();//此时调用的就是c实现的操作