因为形参类型In是接口的话,编译器只能认得In的接口方法,不可能认得C类和F类的方法。
如果形参类型是C的话,因为C类继承于F类,并且实现了In的方法,因此都可以调用。

解决方案 »

  1.   

    因为   C c = new C();
    tt(c);
    实际上是将子类转换成基类的引用~虽然是个基类的引用但是它仍然是个子类对象,只不过这个引用只能看到在子类里有的继承接口的方法,F的方法是属于F的不属于接口IN所以该引用看不到,所以只能掉用接口IN有的~output();
    public static void tt(F in){
    in.output();
    }
    如果你这么写那它只只能掉用childoutput()但这个成员函数是继承父类的、属于子类的函数~
    如果你传入C那很正常子类继承父类~副类有的子类当然应该有!
      

  2.   

    看一看java核心技术应该对你有些帮助,里面说的很清楚
    应该是楼上说的多重继承
      

  3.   

    tt(c);

    }
    }
    你的最后一个}是否改写在System.out.println("Child ");} 这句后?
    我觉得,最接近本质的说法是 kingfox(小狐仙)同志。