質問です。

---------------------------------------------------
PackageBBB::InterfaceB ← <<use>> PackageAAA:ClassA

↑<<implements>>

PackageCCC::ClassC <<use>>→ PackageDDD::ClassD
---------------------------------------------------
PackageBBB::InterfaceBとPackageAAA:ClassAは静的にロードされている。

以上のような構成の時に

public PackageBBB::InterfaceB loadExtension(){
URL[] jarFiles = new URL[]{"PackageBBB.jar" ,"PackageCCC.jar", "PackageDDD"}; // ※1 なぜPackageBBB.jarを指定する必要がある?
URLClassLoader loader = new URLClassLoader(jarFiles, ClassLoader.getSystemClassLoader());
Object instance = loader.loadClass("PackageCCC::ClassC").newInstance(); //※2
PackageBBB::InterfaceB ibImpl = (PackageBBB::InterfaceB) instance; // ※3 CastExceptionが発生するんですが・・・。
return ibImpl;
}

んで、※2で、PackageCCC::ClassCのインスタンスを作成すると、※3でキャストすることができません・・・。
キャストできるような方法を教えてください。
多分、new URLClassLoader(jarFiles, ClassLoader.getSystemClassLoader()); あたりが怪しいとおもうのですが・・・。

あと、※1で、PackageBBB.jarを指定しないと※3で、PackageBBB::InterfaceBがネーヨと怒られちゃいます。
その理由も教えていただけたら幸いです・・・。

長くなりましたがお願い致します。m(_ _)m