ClassLoader is an abstract class. Not an interface.
There are parts of the code that requires a ClassLoader and others that requires an ArtifactClassLoader.
Ideally I would make ArtifactClassLoader implement ClassLoader interface but there's no such interface.

So if I have a method that requires a ClassLoader instance and an ArtifactClassLoader I would have to down cast and assume that it can be down casted or send two parameters, one for the ClassLoader and one for the ArtifactClassLoader:

public void doSomething(ArtifactClassLoader acl)
{
    doSomething2(acl); //this requires an ArtifactClassLoader
    doSomething3((ClassLoader)acl); //this requires a ClassLoader
}

public void doSomething(ArtifactClassLoader acl, ClassLoader cl)
{
    doSomething2(acl); //this requires an ArtifactClassLoader
    doSomething3(cl); //this requires a ClassLoader
}

To overcome that problem seems much better to have a method in ArtifactClassLoader that can actually return a ClassLoader instance:

public void doSomething(ArtifactClassLoader acl)
{
    doSomething2(acl); //this requires an ArtifactClassLoader
    doSomething3(acl.getClassLoader()); //this requires a ClassLoader
}

I will add this as comment of that code to make it clearer.