ホームページ > Java > &#&チュートリアル > Java ではインスタンスを介した静的メソッド呼び出しが許可されているのはなぜですか?また、それを避けるべき理由は何ですか?

Java ではインスタンスを介した静的メソッド呼び出しが許可されているのはなぜですか?また、それを避けるべき理由は何ですか?

Susan Sarandon
リリース: 2024-12-09 05:01:11
オリジナル
675 人が閲覧しました

Why Does Java Allow Static Method Invocation Through Instances, and Why Should You Avoid It?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート