Java 2 has two orthogonal class loader hierarchies. The class definition hierarchy contains subclasses of java.lang.ClassLoader. Each subclass in this hierarchy builds on the behavior and semantics of its ancestors. This inheritance hierarchy is covered in Section 4.3.1. The second hierarchy is a dynamic one formed at runtime. This is the class loader delegation hierarchy. In the previous code example, class C constructs a new instance of class D. The class loader delegation hierarchy enables class C to reach class D, regardless of whether class D is a system, extension, application, or other category of class. The class loader delegation hierarchy is described in Section 4.3.2.