黑马程序员技术交流社区

标题: 网上看到一题关于重载的问题。分享一下。拋砖引玉吧。 [打印本页]

作者: 黄嵘才    时间: 2013-1-24 17:29
标题: 网上看到一题关于重载的问题。分享一下。拋砖引玉吧。
题目:如下代码,输出是什么?


面试时,想了一下,直接说
      很悲剧的错了,面试官细致的讲解了一下,然后豁然开朗。

解答(不要紧着看答案)
这里,主要考察的是重载机制:方法的重载是在编译时绑定。其中重载的方法f,形参Collection包含List,Set。在main方法中,c是Collection类型的数组,分别存放ArrayList和HashSet实例。而f(c)因为不像重写一样是动态绑定的,不会出现,当c是ArrayList实例时,f调用的是f(List)方法;当c是HashSet实例时,调用f(Set)方法。因为c是Collection类型数组,直接在编译时确定f应该指向f(Collection)方法,

所以运行结果是:

  • Collection  
  • Collection  







作者: 李培根    时间: 2013-1-24 18:15
支持下,学习了。
作者: 逍林游    时间: 2013-1-24 18:22
难道是:
List
Set
作者: 刘军亭    时间: 2013-1-24 19:01
值得学习,不错
作者: 黑马张英涛    时间: 2013-1-24 19:24
不知道楼主测试了没有,如果楼主代码没写错的话应该根本就通过编译吧


QQ截图20130124192412.png (43.54 KB, 下载次数: 30)

QQ截图20130124192412.png

作者: Rancho_Gump    时间: 2013-1-24 19:47
楼主只是示意  学习了
补个完整程序吧:
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class chongzai {
         public static void main(String[] s){
               Collection[] c={new ArrayList(),new HashSet()};
               for(int i=0;i<c.length;i++)
               { OverrideTest.f(c[i]);}
         }
}

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");
    }

}

作者: 汪平乐    时间: 2013-1-24 20:39
学习了...




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2