Prólogo
La primera vez que vi que puede llamar a métodos estáticos a través de instancias de clase en Java. Por supuesto, esto no se recomienda para evitar problemas inesperados. Hablaré de ello más tarde, pero llamar a métodos estáticos a través de instancias de clase en C # no se compila. Pasará, haga una nota aquí.
La instancia de clase llama al método estático
Primero, veamos un ejemplo simple para explicar por qué los métodos estáticos no pueden llamarse a través de instancias de clase. Sabemos que un objeto no desinstalado arrojará una excepción de puntero nulo al llamar al método o campo correspondiente, como el siguiente:
public static void main (String [] args) { Objeto o = nulo ; System.out.println (o.toString ()); }
Sin embargo, si se aplica a un método estático, se producirán problemas inesperados, como el siguiente ejemplo:
jugador de clase pública { public static final String type = "Human" ; int int privado ; public static String getType () { tipo de retorno ; } public int getAge () { return age; } }
public static void main (String [] args) { Jugador jugador = nulo ; System.out.println (player.getType ()); System.out.println (player.getAge ()); }
El objeto anterior no se instancia, pero el método estático de llamar a su variable no arrojará una excepción e imprimirá el resultado. Por supuesto, la respuesta también es muy simple, porque el método estático pertenece a la clase en lugar de la instancia de clase, por lo que la llamada anterior player.getType ( ) Básicamente, se llama a Player.getType () .
Resumen
La posibilidad de llamar a métodos estáticos a través de instancias de clase en Java puede ser un defecto en el diseño original. Por supuesto, esto es solo mi especulación personal. No lo he estudiado demasiado. Veo que no se compila y puede ejecutarse normalmente. Creo que esto Hay una gran diferencia con C #, por lo que se resume el registro.