gpt4 book ai didi

Java多态方法重写

转载 作者:行者123 更新时间:2023-11-30 04:11:35 26 4
gpt4 key购买 nike

我正在编写一个具有 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 内部,我也有 compress() ,它会抛出 IOException,但 compress() 会根据它是 JPEGHandler 还是 TiffHandler 执行不同的操作。我不确定我是否只是错误地使用了多态性,或者我是否在我的父类(super class) ImageHandler 中遗漏了某些内容。为什么编译器说 super 方法不会抛出 IOException,而我确实声明了它会抛出 IOException?

最佳答案

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

关于Java多态方法重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19487056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com