I am trying to understand the drawbacks as mentioned in [Java docs](http://docs.oracle.com/javase/tutorial/reflect/)

**Security Restrictions**

> 
> Reflection requires a runtime permission which may not be present when
> running under a security manager.
> 
> 
> 

What are the runtime permissions that reflection needs? What is security manager in this context? Is this drawback specific to Applets only?

**Exposure of Internals**

> 
> Since reflection allows code to perform operations that would be
> illegal in non-reflective code, such as accessing private fields and
> methods, the use of reflection can result in unexpected side-effects,
> which may render code dysfunctional and may destroy portability.
> Reflective code breaks abstractions and therefore may change behavior
> with upgrades of the platform.
> 
> 
> 

How reflection can break abstraction? and how does it affect with upgrades of the platform.

Please help me in clarifying these. Thanks a lot.