有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java多态性方法重写

我正在编写一个有3个特定类的程序,ImageHandlerTiffHandlerJPEGHandler

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

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

我的问题是,由于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的内部,我还有compress()抛出IOException,除了compress()根据它是JPEGHandler还是TiffHandler做一些不同的事情。我不确定我是否只是错误地使用了多态性,或者我的超级类ImageHandler中缺少了什么。当我确实声明超级方法不会抛出IOException时,为什么编译器会说超级方法不会抛出IOException


共 (1) 个答案

  1. # 1 楼答案

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