因为 C c = new C(); tt(c); 实际上是将子类转换成基类的引用~虽然是个基类的引用但是它仍然是个子类对象,只不过这个引用只能看到在子类里有的继承接口的方法,F的方法是属于F的不属于接口IN所以该引用看不到,所以只能掉用接口IN有的~output(); public static void tt(F in){ in.output(); } 如果你这么写那它只只能掉用childoutput()但这个成员函数是继承父类的、属于子类的函数~ 如果你传入C那很正常子类继承父类~副类有的子类当然应该有!
tt(c);
实际上是将子类转换成基类的引用~虽然是个基类的引用但是它仍然是个子类对象,只不过这个引用只能看到在子类里有的继承接口的方法,F的方法是属于F的不属于接口IN所以该引用看不到,所以只能掉用接口IN有的~output();
public static void tt(F in){
in.output();
}
如果你这么写那它只只能掉用childoutput()但这个成员函数是继承父类的、属于子类的函数~
如果你传入C那很正常子类继承父类~副类有的子类当然应该有!
应该是楼上说的多重继承
}
}
你的最后一个}是否改写在System.out.println("Child ");} 这句后?
我觉得,最接近本质的说法是 kingfox(小狐仙)同志。