麒麟远创面试题2:关于重载

题目:如下代码,输出是什么?

import java.util.*; class OverrideTest { public static void f(Collection c){ System.out.println("Collection"); } public static void f(List m){ System.out.println("List"); } public static void f(Set m){ System.out.println("Set"); } public static void main(String[] s){ Collection[] c={new ArrayList(),new HashSet()}; for(int i=0;i<c.length;i++) f(c[i]); } } 

      面试时,想了一下,直接说

List Set 

      很悲剧的错了,面试官细致的讲解了一下,然后豁然开朗。这里,主要考察的是重载机制:方法的重载是在编译时绑定。其中重载的方法f,形参Collection包含List,Set。在main方法中,c是Collection类型的数组,分别存放ArrayList和HashSet实例。而f(c[i])因为不像重写一样是动态绑定的,不会出现,当c[i]是ArrayList实例时,f调用的是f(List)方法;当c[i]是HashSet实例时,调用f(Set)方法。因为c是Collection类型数组,直接在编译时确定f应该指向f(Collection)方法,所以运行结果是:

Collection Collection 

 

你可能感兴趣的:(c,面试,list,String,Class,import)