Java java.lang.AbstractMethodError
この記事は、java.lang.AbstractMethodError
と Java でそれらを解決する方法を理解するのに役立ちます。
Java の java.lang.AbstractMethodError
エラーを修正する
実行時にプログラムで AbstractMethodError
が発生することがあります。 この間違いに慣れていないと、問題の原因を突き止めるのに時間がかかることがあります。
このレッスンでは、AbstractMethodError
をさらに詳しく調べます。 AbstractMethodError
とは何か、いつ発生する可能性があるかを学びます。
プログラムが実装されていない抽象メソッドを作成しようとすると、エラー AbstractMethodError
が発生します。 抽象プロセスが実装されていない場合、コンパイラがエラーを発生させることはわかっています。 その結果、アプリケーションは作成されません。
コマンドライン javac コンパイラを使用して AbstractMethodError
の例を作成します。 このエラーは、クラスが個別にコンパイルされたときに生成されますが、これはほとんどの IDE で禁止されています。
以下のソースコードから Abstract
という名前の Java クラスを作成します。
コード (Abstract.java
):
public class Abstract {
public void hello() {
System.out.println("Hello! I belong to abstract class");
}
}
このクラスをコンパイルするには、コマンド ラインで次の手順に従います。
javac Abstract.java
最初のクラスがコンパイルされたら、次のソース コードを使用して AbstractClass
という名前の 2 番目のクラスを作成します。
コード (AbstractClass.java
):
public class AbstractClass extends Abstract {
public static void main(String[] args) {
AbstractClass newabs = new AbstractClass();
newabs.hello();
}
}
これは、次のようにアセンブルして実行した結果です。
javac AbstractClass.java
java AbstractClass
出力:
Hello! I belong to abstract class
すべて問題ありませんが、hello()
関数を抽象関数に変更し、AbstractClass
を変更せずに Abstract
を再コンパイルするとどうなるでしょうか? Abstract
を次のように変更してみてください。
public abstract class Abstract {
public abstract void hello();
}
このクラスを簡単に再コンパイルできるようになりました。 ただし、AbstractClass
を実行すると、次の結果が得られます。
Exception in thread "main" java.lang.AbstractMethodError: AbstractClass.hello()V
at AbstractClass.main(AbstractClass.java:6)
基本クラスのメソッドが抽象メソッドに変更され、結果として基本クラスが変更され、必要な変更が子クラスで行われなかったとします。 その場合、AbstractMethodError
が発生します (つまり、抽象メソッドをオーバーライドします)。
したがって、上記の例と同様に、プログラマーは実装されていない抽象メソッドを (その抽象性を意識せずに) 使用します。 基本クラスのみが変更されてコンパイルされるため、彼はこの問題に気づいていません。
この状況では、AbstractClass
で Abstract
メソッドを実装することがすべて必要です。 AbstractMethodError
の問題は、これを行うことで解決されます。
public class AbstractClass extends Abstract {
public static void main(String[] args) {
AbstractClass newabs = new AbstractClass();
newabs.hello();
}
@Override
public void hello() {
System.out.println("Hello! I belong to abstract class");
}
}
出力:
Hello! I belong to abstract class
Shiv is a self-driven and passionate Machine learning Learner who is innovative in application design, development, testing, and deployment and provides program requirements into sustainable advanced technical solutions through JavaScript, Python, and other programs for continuous improvement of AI technologies.
LinkedIn