我正在编写一个包含3个特定类ImageHandler
,TiffHandler
和JPEGHandler
的程序。
JPEGHandler
和TiffHandler
都延伸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?
答案 0 :(得分:2)
问题可能是您的.class
文件和.java
文件不同步,而您可以编译,因为您已将throws
子句添加到ImageHander.java
,你没有得到更新的编译代码。清理并重新编译整个项目,错误应该消失。