Java - Reflection
Method[] methods = MyObject.class.getMethods();
- inspect classes, interfaces, fields and methods at runtime, without knowing the names of the classes, methods etc. at compile time
- instantiate new objects, invoke methods
- dynamic proxies (invoke some other methods)
- dynamic class loading