インスタンスを介した静的メソッド呼び出しの奇妙なケース
Java の独特の動作については広く知られているにもかかわらず、疑問は残ります。なぜインスタンスを介した静的メソッドはエラーとみなされませんコンパイラ?
コンパイラ設計の誤り
Java 設計者は、誤ってこの異常を言語設計に導入してしまいました。この問題を修正しようとすると、互換性の問題が発生し、永続的な欠陥として残ることになります。
誤解を招くコード
この動作は技術的には間違っていませんが、非常に誤解を招く恐れがあります。コード。ドット演算子を使用したメソッドの呼び出しは、インスタンスの値の使用を意味します。メソッドが静的である場合、この期待は破られます。
一貫性のない処理
静的メソッド呼び出しの Java の処理には一貫性がありません。初期化されていないインスタンス変数を介して静的メソッドを呼び出すことは許可されませんが、実行時の値が無関係であっても、初期化されたインスタンスに対するアクセス許可は付与されます。
継承に関する考慮事項
主張に反して、継承は静的メソッドには適用されません。次のコードに示されているように、これらはポリモーフィックではありません:
class Base { static void foo() { System.out.println("Base.foo()"); } } class Derived extends Base { static void foo() { System.out.println("Derived.foo()"); } } public class Test { public static void main(String[] args) { Base b = new Derived(); b.foo(); // Prints "Base.foo()" } }
静的メソッド呼び出しはインスタンスの実行時値の影響を受けず、ポリモーフィズムの欠如を明らかにし、そのような呼び出しの誤解を招く性質をさらに強調しています。
以上がなぜ Java はインスタンスを介した静的メソッドの呼び出しをエラーとして扱わないのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。