比如有个接口inteface B{
       public void save();
}
有两个他的实现BImp1,BImp2有个类C 用到B.save()的时候,会调用哪个实现类的方法,
如有不妥,请指点,谢谢.

解决方案 »

  1.   

    如果实例是BImp1,就调用BImp1的save.
      

  2.   

    如果实例是BImp1,就调用BImp1的save
    但我们定义的时候只是定义了接口
      

  3.   

    new的时候new的是哪个就调用哪个
      

  4.   

    这就是多态呀,在执行期判断怎么样绑定的。如果C中实例化的是BImp1 B1=NEW BImp1();
    那么调用的实质是B1.SAVE();B2 也是一样的 。
      

  5.   

    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
      

  6.   

    对呀..一个类可以实现多个接口的内容直接父类的意思是.
    上面那个例子里...   拍照手机  extends 拍照类,手机类....这种继承两个父类的方法是不允许的.....
    最多只能分两次继承
    手机类  extends 拍照类
    拍照手机 extends 手机类这样...手机类就是拍照手机的直接父类...而拍照类则是拍照手机的间接父类
      

  7.   


    B b = new BImp1();
    b.save();
    这样掉的是 BImp1 的save方法。B b = new BImp2();
    b.save();
    这样就掉了 BImp2 的save方法了。
      

  8.   

    接口变量相当于C++里头的指针一样,Java里头的的变量都是引用。
    接口引用可以指向任何继承自它的实现类,所以运行时实际调用的是它指向的实例。
    A implements B
    C implements B

    B b = new A();//此时b指向A实例
    b = new C();//此时b改成指向C实例,A被JVM回收掉。
    b.save();//此时调用的就是C实现的操作