JDK1.2之前,是没有双亲委派模型的,当时的开发者要自定义ClassLoader,都是继承ClassLoader并覆盖loadClass方法。JDK1.2之后,为了向前兼容,将双亲委派的逻辑放在了loadClass方法中,当父类加载不了时,会调用findClass来让子类加载,所以子类应该将加载类代码放在findClass方法中。
双亲委派只是JDK建议的模型,并不是强制的,开发者完全可以不遵守双亲委派。
在双亲委派模型中,越基础的类由越高层的父类加载,但基础类也可能要调用或者说是触发应用类的加载,这时候就需要破坏双亲委派模型了,通过线程类加载器来实现,应用将自己的类加载器设置为线程类加载器,然后基础类用线程类加载器来加载应用类。
引入双亲委派模型,是为了安全:https://www.artima.com/insidejvm/ed2/linkmod3.html