Consider this example :
import java.lang.reflect.Field; public class Test { public static void main(String[] args) { C c = new C(); try
Reflection is dangerous. Period.
What's the point in limiting the utility of a really dangerous system for the sake of ever so slightly increased safety?
Also, automated serialization requires the ability to "suck the brains" out of any class; ignoring access modifiers is a necessity in this case.