Instance superInst = new Instance( superClass );
Instance superInst = new Instance( superClass, this );
    public Object(Collection classes) throws LemRuntimeException {        interpreter = new Interpreter(this);        // Do these classes actually participate in the same inheritance        // hierarchy?        if( !validClasses( classes )) {            throw new LemRuntimeException( "Specified class list will not produce a valid Object" );        }                // Maintain a list of classes already instantiated        ArrayList instantiatedClasses = new ArrayList();                for( Iterator i = classes.iterator(); i.hasNext(); ) {            metamodel.Class theClass = (metamodel.Class)i.next();            Instance inst = new Instance( theClass, this );                        // Instantiate all parent classes as well            Collection gens = theClass.getAllGeneralisations().values();                        for( Iterator j = gens.iterator(); j.hasNext() ; ) {                Generalisation g = (Generalisation)j.next();                                metamodel.Class superClass = g.getSuperclass();                /* The root class of a generalisation hierarchy can                 * appear in more than one call to "getAllGeneraliations",                 * but we don't want to instantiate it again                 */                if( instantiatedClasses.contains(superClass)) {                    continue;                }                                instantiatedClasses.add( superClass );                Instance superInst = new Instance( superClass );                addInstance( superInst );            }                        addInstance( inst );        }    }