いいえ。すべてのクラスローダーには祖先としてブートストラップクラスローダーがあり、クラスローダーですでに定義されているクラスをロードしようとすると、祖先のバージョンが使用されるだけです。java.lang.Object
これは、その他の組み込み関数が再定義されるのを防ぐための意図的なものです。
のjavadocからClassLoader
:
クラスは、委任モデルを使用ClassLoader
してクラスとリソースを検索します。の各インスタンスにClassLoader
は、関連付けられた親クラスローダーがあります。クラスまたはリソースの検索が要求されると、ClassLoader
インスタンスは、クラスまたはリソース自体を検索する前に、クラスまたはリソースの検索をその親クラスローダーに委任します。「ブートストラップクラスローダー」と呼ばれる仮想マシンの組み込みクラスローダーには、それ自体には親がありませんが、ClassLoader
インスタンスの親として機能する場合があります。
defineClass
呼び出されることなく公開するカスタムクラスローダーを定義し、findClass
で発生する委任を回避できる場合がありますが、存在する場合はすべてのJVMで意図したとおりに機能することにfindClass
依存しません。defineClass(className, bytes)
parent.findClass(className)