当一个方法的参数是一个接口类型时,如果一个类实现了该接口,那么就可以把该类的实例的引用传值给该参数,参数可以回调类实现的接口方法?        
例子如下:
interface Show{
  void show();
}
class A implements Show{
  public void show(){
    System.out.println("我喜欢NBA");
    }
 }
class B{
   public void f(Show s){
         s.show();
     }
}
public class C{
   public static void main(String[]args){
      B b=new B();
      b.f(new A());
}
}
我想知道的是为什么能把类A的实例的引用传值给类B做它方法f的参数呢?

解决方案 »

  1.   

    我想应该是这样吧:
    类B的f方法里需要传一个接口Show的实例(就跟类Show的实例差不多)作为参数;
    类A实现了接口Show(就跟继承了类Show差不多);
    所以就可以把类A的实例的引用传值给类B做它方法f的参数(父类引用指向子类对象);
      

  2.   

     b.f(new A()); 
    你是不是写错了
     贴下一正确的代码~
      

  3.   

    b.f(new A()); 并没什么问题对象既可以做为它自己本身的类型使用,也可以作为它的基类型使用~
    说白了,这种做法就是"向上转型",在java中,向上转型是安全的,想要再底层的东西的话可以去google下向上转型的相关信息
      

  4.   

    只要实现了show的接口的类的对象都可以传递过来