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 をスローしないと言っているのはなぜですか?