比如有个接口inteface B{
public void save();
}
有两个他的实现BImp1,BImp2有个类C 用到B.save()的时候,会调用哪个实现类的方法,
如有不妥,请指点,谢谢.
public void save();
}
有两个他的实现BImp1,BImp2有个类C 用到B.save()的时候,会调用哪个实现类的方法,
如有不妥,请指点,谢谢.
但我们定义的时候只是定义了接口
那么调用的实质是B1.SAVE();B2 也是一样的 。
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
上面那个例子里... 拍照手机 extends 拍照类,手机类....这种继承两个父类的方法是不允许的.....
最多只能分两次继承
手机类 extends 拍照类
拍照手机 extends 手机类这样...手机类就是拍照手机的直接父类...而拍照类则是拍照手机的间接父类
B b = new BImp1();
b.save();
这样掉的是 BImp1 的save方法。B b = new BImp2();
b.save();
这样就掉了 BImp2 的save方法了。
接口引用可以指向任何继承自它的实现类,所以运行时实际调用的是它指向的实例。
A implements B
C implements B
则
B b = new A();//此时b指向A实例
b = new C();//此时b改成指向C实例,A被JVM回收掉。
b.save();//此时调用的就是C实现的操作