Compile this program:interface Closable {
    void close();
}class File implements Closable {
    @Override
    public void close() {
        //... close this file...
    }
}
Sun的答案是会有编译错误,但我上机的结果却没有,请教大家了!

解决方案 »

  1.   

    不是你错了,是sun的题错了。
      

  2.   

    我也试了,没报错,不明白其中玄机,跟 File 有关么?
      

  3.   

    我现在才明白问题的症结:这道题不是考你interface如何定义!
    这题是没有main(String args[])方法,程序编译时没有错,说明语法正确!而在运行时,JVM会自动调用main(String args[])这个方法,显然,这个File类不具有该方法的定义,程序执行找不到入口,所以会抛出NoSuchMethodError!
      

  4.   

    你的编译器有问题!Sun没有错!可能你的编译器不过来声明@override
    使用@override强制声明,覆盖父类的方法,而非实现接口!
    她表示覆盖父类中的close()方法,而父类是超类Object,他并没有close()方法。删除@override 就对了!
      

  5.   

    You must know what is 'override 'and what is 'implement',and know the difference.
      

  6.   

    @override 是什么意思
    楼主删了就行了
      

  7.   

       你的结构应该是public的,看你这个接口和实现类放在同一个包内不?如果不是应该会报错,呵呵!
      

  8.   

    netbeans6.8会把override不仅仅用于重写父类的方法,还用于标注实现接口的方法,这样方便了程序员。可是sun不这么理解,实现接口没有对应的标注
      

  9.   

    不用工具编译试试,用sun的jdk在dos下编译
      

  10.   

    Yes sir ,I do know .Thanks.
      

  11.   

    @override 
    是什么意思?
    难不成是注释,告诉我们重写该方法吗?
    为什么要加它呢?
      

  12.   

    我觉得  可能跟类名有关系吧  有File类的命名冲突
      

  13.   

    实现与重载是不同的,实现是必须实现接口内所有的方法。重载是重写父类的方法。本题只是重写了父类的方法,并没有实现Closable的close()方法
      

  14.   

    sorry重载与重写的概念搞错了
      

  15.   


    虽然跟File同名,如果没有导入File类,  是没有问题的
      

  16.   

    答案见下:
    http://blogclosed.javaeye.com/blog/435720
    http://blogs.sun.com/ahe/entry/override