Java多态方法覆盖

时间:2013-10-21 05:47:52

标签: java polymorphism

我正在编写一个包含3个特定类ImageHandlerTiffHandlerJPEGHandler的程序。

JPEGHandlerTiffHandler都延伸ImageHandler。在所有3个类中都有一个名为compress()的方法,它压缩对象当前正在处理的任何图像。

我也在尝试创建一个实现Runnable的单独类,但我不想创建两个Runnable类,一个用于TiffHandler,另一个用于JPEGHandler。我宁愿只创建一个可以接受ImageHandler对象的Runnable类。

我的问题是,由于Runnable类只有一个ImageHandler对象,每当我调用compress()时,它会在运行时抛出错误说:

Uncompilable source code - compress() in fjimagecompressor.JPEGHandler cannot override compress() in fjimagecompressor.ImageHandler
  overridden method does not throw java.io.IOException

第二行让我感到困惑,因为在ImageHandler内部我有一个名为compress()的空白方法:

    public void compress() throws IOException{    
        /*blank*/
    }

并且在TiffHandler和JPEGHandler内部我也有压缩()抛出IOException,除了compress()根据它是JPEGHandler还是TiffHandler做了不同的事情。我不确定我是否只是错误地使用多态,或者我在我的超类ImageHandler中缺少某些东西。为什么编译器说超级方法在我确实声明它的时候不会抛出IOException?

1 个答案:

答案 0 :(得分:2)

问题可能是您的.class文件和.java文件不同步,而您可以编译,因为您已将throws子句添加到ImageHander.java,你没有得到更新的编译代码。清理并重新编译整个项目,错误应该消失。