ホームページ >Java >&#&チュートリアル >Java ではインスタンスを介した静的メソッド呼び出しが許可されているのはなぜですか?また、それを避けるべき理由は何ですか?
Java のインスタンスを介した静的メソッドの呼び出し
Java では、インスタンスを介して静的メソッドを呼び出すことができます。これにより、コンパイラが起動されます。警告ですが、エラーではありません。
なぜそれがエラーではないのかエラー?
Java 設計チームは、当初この動作を許可するという見落としがありました。明示的には承認されていませんが、互換性の理由から維持されています。コードが混乱する可能性がありますが、本質的に間違っているわけではありません。
ポリモーフィズムの幻想
インスタンスを介した静的メソッドの呼び出しが誤解を招く可能性がある理由の 1 つは、次のとおりです。それは多態性の印象を生み出すということです。真のポリモーフィズムでは、呼び出されるメソッドはオブジェクトのタイプに基づいて異なります。ただし、静的メソッドは多態性ではありません。これらは常に、宣言されているクラスにバインドされます。
次の例を考えてみましょう:
Thread thread = new Thread(); int activeCount = thread.activeCount();
このコードはコンパイルされますが、activeCount は Thread クラスの静的メソッドであるため、警告が生成されます。 。コンパイラは、Thread クラスのどのインスタンスを呼び出しに使用するかを決定できません。このタイプのコードは、混乱や潜在的なエラーを引き起こす可能性があります。
代替アプローチ
C# などの言語では、インスタンスを介して静的メソッドを呼び出すことは許可されていません。代わりに、正しいアプローチは、以下に示すように、クラス名を使用して静的メソッドを呼び出すことです。
public class Abc { public void Test() { // Static methods in other classes are available via // the class name Foo.Bar(); } }
結論
静的メソッドを呼び出すことは技術的には許可されていますが、 Java のインスタンスでは、誤解を招くコードにつながる可能性のある悪い習慣とみなされます。開発者はこの動作を回避し、生成されるコンパイラ警告をエラーとして扱う必要があります。最新の IDE では、コードの明確さと正確さを確保するために、そのような呼び出しをエラーとして扱うようにコンパイラーを構成することをお勧めします。
以上がJava ではインスタンスを介した静的メソッド呼び出しが許可されているのはなぜですか?また、それを避けるべき理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。