序文
Javaのクラスインスタンスを介して静的メソッドを呼び出すことができることを初めて見ました。もちろん、これは予期しない問題を回避するために推奨されていません。後で説明しますが、C#のクラスインスタンスを介して静的メソッドを呼び出してもコンパイルされません。合格します、ここにメモを書きます。
クラスインスタンスが静的メソッドを呼び出す
最初に、クラスインスタンスを通じて静的メソッドを呼び出せない理由を説明する簡単な例を見てみましょう。インスタンス化されていないオブジェクトは、次のように、対応するメソッドまたはフィールドを呼び出すときにnullポインター例外をスローすることがわかっています。
public static void main(String [] args){ オブジェクトo = null ; System.out.println(o.toString()); }
ただし、静的メソッドに適用すると、次の例のような予期しない問題が発生します。
public class Player { public static final String type = "Human" ; プライベート int型の年齢; public static String getType(){ 戻り値のタイプ。 } public int getAge(){ 年齢を返す; } }
public static void main(String [] args){ プレーヤーplayer = null ; System.out.println(player.getType()); System.out.println(player.getAge()); }
上記のオブジェクトはインスタンス化されていませんが、変数を呼び出す静的メソッドは例外をスローせず、結果を出力しません。もちろん、静的メソッドはクラスインスタンスではなくクラスに属しているので、答えも非常に簡単です。したがって、上記の呼び出しは player.getType( ) 基本的に、Player.getType()が呼び出され ます。
まとめ
Javaのクラスインスタンスを介して静的メソッドを呼び出す可能性は、元の設計の欠陥である可能性があります。もちろん、これは私の個人的な推測にすぎません。あまり検討していません。コンパイルされず、正常に実行できると思います。 C#との大きな違いがあるので、レコードをまとめます。