1

ImageHandler、、、TiffHandlerおよびの 3 つの特定のクラスを持つプログラムを作成していJPEGHandlerます。

JPEGHandler両方ともTiffHandler拡張しImageHandlerます。3 つのクラスすべての内部には、オブジェクトが現在処理しているイメージを圧縮する compress() というメソッドがあります。

Runnable を実装する別のクラスも作成しようとしていますが、TiffHandler 用と JPEGHandler 用の 2 つの Runnable クラスを作成する必要はありません。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() という空のメソッドがあるため、2 行目は私を混乱させます。

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

また、TiffHandler と JPEGHandler の内部には、IOException をスローする compress() もあります。ポリモーフィズムを間違って使用しているだけなのか、それともスーパー クラス ImageHandler に何かが欠けているのか、よくわかりません。スーパー メソッドが IOException を実際にスローすることを宣言しているのに、コンパイラが IOException をスローしないと言っているのはなぜですか?

4

1 に答える 1

2

問題はおそらく、あなたの.classファイルとあなたの.javaファイルが同期していないことです. にthrows句を追加したためにコンパイルできますImageHander.javaが、コンパイルされたコードが更新されていません. プロジェクト全体をクリーンアップして再コンパイルすると、エラーは解消されます。

于 2013-10-21T05:58:21.073 に答える