Question: Groovy can access private methods and variables of a Java class. How does Groovy do this behind the scene? Is it because of the use of `invokedynamic` bytecode instruction which is used by `MethodHandle` class? I think Java uses `invokespecial` instruction for calling `private` methods and `invokevirtual` for `public` right which respects access modifiers?

Answer: 
Groovy is written in Java, so it hopefully doesn't rely on the byte code directly, it doesn't it using the [Reflection API](https://docs.oracle.com/javase/tutorial/reflect/).

For more details check for [`java.lang.reflect`](https://github.com/groovy/groovy-core/search?utf8=%E2%9C%93&q=java.lang.reflect) in the source code, you will then see how it uses the Reflection API behind the scene.
You can do this in Java anyway by using reflection, for example, this method will set the value of a private static field...

```
public static void setStaticField(Class<?> clazz, String fieldName, Object value) {
    try {
        Field field = clazz.getDeclaredField(fieldName);
        field.setAccessible(true);
        field.set(null, value);
    } catch (Exception ex) {
        throw new IllegalArgumentException("Could not set field '" + fieldName + "' of type '" + clazz.getName() + "' to: " + value, ex);
    }
}

```

Notice `field.setAccessible(true)`

This can be prevented by having an appropriate Security Manager Policy set up. See [How to restrict developers to use reflection to access private methods and constructors in Java?](https://stackoverflow.com/questions/7566626/how-to-restrict-developers-to-use-reflection-to-access-private-methods-and-const)