¿Es posible acceder a métodos de instancia y variables a través de métodos de clase?

Hasta que leí esto en Oracle Doc (los métodos de clase no pueden acceder a las variables de instancia o los métodos de instancia directamente; deben usar una referencia de objeto), lo único que sé, acerca de los métodos de instancia y las variables no pueden ser accedidos por los métodos de clase (estáticos). directamente.

¿Qué significa cuando dice … deben usar una referencia de objeto? ¿Significa que podemos acceder a variables y métodos de instancia indirectamente usando métodos de clase?

Gracias de antemano.

Significa que esto está permitido:

public class Test { public int instanceVariable = 42; public void instanceMethod() {System.out.println("Hello!");} public static void staticMethod() { Test test = new Test(); System.out.println(test.instanceVariable); // prints 42 test.instanceMethod(); // prints Hello! } } 

y esto no es

 public class Test { public int instanceVariable = 42; public void instanceMethod() {System.out.println("Hello!");} public static void staticMethod() { System.out.println(instanceVariable); // comstacktion error instanceMethod(); // comstacktion error } } 

Una variable de instancia, como sugiere su nombre, está vinculada a una instancia de una clase. Por lo tanto, acceder a él directamente desde un método de clase, que no está vinculado a ninguna instancia específica, no tiene sentido. Por lo tanto, para acceder a la variable de instancia, debe tener una instancia de la clase desde la que accede a la variable de instancia.

Sin embargo, lo contrario no es cierto: una variable de clase está en el “nivel superior” y, por lo tanto, es accesible a los métodos y variables de instancia.

 class MyClass; { public int x = 2; public static int y = 2; private int z = y - 1; //This will compile. public static void main(String args[]) { System.out.println("Hello, World!"); } public static void show() { System.out.println(x + y); // x is for an instance, y is not! This will not compile. MyClass m = new MyClass(); System.out.println(mx + y); // x is for the instance m, so this will compile. } public void show2() { System.out.println(x + y); // x is per instance, y is for the class but accessible to every instance, so this will compile. } }