Java多态性方法重写
我正在编写一个有3个特定类的程序,ImageHandler
,TiffHandler
和JPEGHandler
JPEGHandler
和TiffHandler
都扩展了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 楼答案
问题可能是您的
.class
文件和.java
文件不同步,虽然您可以编译,因为您将throws
子句添加到了ImageHander.java
,但编译后的代码没有得到更新。清理并重新编译整个项目,错误就会消失