Javaの静的メソッドは、コンパイル時に常に解決されますか?Javaの静的メソッドは、コンパイル時に常に解決されますか?
答えて
短い答え:はい
私はJava Language Specificationの正確なセクションを見つけることができませんでした。助けてください。 :)
はい、ただし、実行時に静的メソッドが削除された場合は、ベースクラスの一致メソッドが呼び出されます(名前と署名はコンパイル時の元のメソッドと完全に一致している必要があり、メソッドはJVM仕様ルール)。
Derived.fn();
そして次呼ばコード:
class Base {
public static void fn() {
System.err.println("Base");
}
}
class Derived extends Base {
public static void fn() {
System.err.println("Derived");
}
}
プリントDerived
今、私はすべてをコンパイルします。その後、Derivedを再コンパイルすると、
class Derived extends Base {
}
プリントBase
が表示されます。おそらく、その後、私はちょうど派生再コンパイル
に変更:
class Derived {
}
はエラーをスローします。
いくつかの引用符:正確な方法であることを:
「コンパイラは、正確な方法は、各静的メソッド呼び出しのために呼ばれ、それはコンパイル時に決定したクラス(つまり、非静的メソッドには大きな違いだが呼び出すことをコンパイルするとき呼び出されるのは実行時にこれらのケースでのみ決定される)。
"静的メソッドの呼び出しは、呼び出されるコンパイル時の型に依存します。
質問の正解ですが、実行時に決定された非静的メソッドについての引用は間違っています。オーバーライドされたメソッドだけが実行時に決定され、他のメソッドはオーバーライドを含むコンパイル時に決定されます。 – Robin
@ロビン:引用符は私のものではありませんが、良い点です:) –
リンクが死んでいるようです –
- 1. gccでコンパイルされた静的ライブラリの未解決のシンボル
- 2. コンパイル時に解決されないディレクティブはなぜですか?
- 3. 次のコードは正常にコンパイルされますが、静的使用時にリンクのエラーが表示される
- 4. 静的に解決のタイプは
- 5. 静的メソッド&継承 - java.lang.IllegalAccessErrorコンパイル時に見つからない
- 6. f#型メンバーの静的に解決された型
- 7. 前処理時またはコンパイル時に列挙型の値が解決されていますか?
- 8. Javaの静的メソッド
- 9. Javaの静的メソッド
- 10. 工場作成メソッド常に静的?
- 11. Python:可能であれば、プライベートクラスのメソッドを常に静的にしますか?
- 12. 静的メソッドと静的変数のjava
- 13. Java静的解析:はじめに
- 14. ネイティブJavaメソッドは静的Javaメソッドと同等ですか?
- 15. Java継承または静的メソッド
- 16. コンパイル時のアセンブリ解決の順序
- 17. PHP:スコープ解決演算子と非静的メソッド
- 18. 呼び出す静的メソッドを動的に決定する
- 19. javaのsyncrhonized静的メソッド
- 20. Javaの名前静的メソッド
- 21. Javaコールグラフの静的解析
- 22. Javaでは、静的メソッド自体の内部で宣言された変数は静的ですか?
- 23. コンパイルされた静的ライブラリの変更
- 24. Java用の静的解析ツールはどれですか?
- 25. 静的メソッドで静的メソッドと非静的メソッドにアクセスする方法
- 26. Java - 汎用静的メソッド
- 27. Javaジェネリック、シングルトン、静的メソッド
- 28. Pythonでのインポートは静的な解決方法ですか?
- 29. ObjectクラスのtoString()メソッドはどのようにjavaでコンパイルされますか?
- 30. サブクラスに強制的に静的解析メソッドを実装させることはできますか?
お願いします。規則が適用されない場合、どんなダッジがありますか? –
もう一つの短い答え:いいえ –
@ Joao:Java静的修飾語では、正確に "コンパイル時"を意味します。メソッド/変数は、クラス名で静的にバインドされます。例外なく。 – dfa