class ClassImpl extends ClassOrInterfaceImpl<Class> implements Class {

	private Type superType;
	private final List<Constructor> constructors;

    /**
     * Initializes this class using a name.
     * <p>
     * <b>Warning!</b> This class should not be instantiated directly but using 
     * the {@link Class#of(java.lang.String)} method!
     * 
     * @param name  the name
     */
	public ClassImpl(String name) {
		super(name);
		superType = null;
		constructors = new ArrayList<>();
	}
	
    /**
     * Copy constructor.
     * 
     * @param prototype  the prototype
     */
	protected ClassImpl(Class prototype) {
		super (prototype);
		this.superType = prototype.getSupertype().orElse(null);
		this.constructors = Copier.copy(prototype.getConstructors());
	}

	@Override
	public Class setSupertype(Type superType) {
		this.superType = superType;
		return this;
	}

	@Override
	public Optional<Type> getSupertype() {
		return Optional.ofNullable(superType);
	}

	@Override
	public List<Constructor> getConstructors() {
		return constructors;
	}

    @Override
	public ClassImpl copy() {
		return new ClassImpl(this);
	}

    @Override
    public int hashCode() {<FILL_FUNCTION_BODY>}

    @Override
    public boolean equals(Object obj) {
		if (!super.equals(obj)) {
        	return false;
		}
        final ClassImpl other = (ClassImpl) obj;
        if (!Objects.equals(this.superType, other.superType)) {
            return false;
        }
        return Objects.equals(this.constructors, other.constructors);
    }
}

        int hash = super.hashCode();
        hash = 11 * hash + Objects.hashCode(this.superType);
        hash = 11 * hash + Objects.hashCode(this.constructors);
        return hash;
    
<methods>public boolean equals(java.lang.Object) ,public List<com.speedment.common.codegen.model.AnnotationUsage> getAnnotations() ,public List<ClassOrInterface<?>> getClasses() ,public List<com.speedment.common.codegen.model.Field> getFields() ,public List<com.speedment.common.codegen.model.Generic> getGenerics() ,public List<com.speedment.common.codegen.model.Import> getImports() ,public List<com.speedment.common.codegen.model.Initializer> getInitializers() ,public List<java.lang.reflect.Type> getInterfaces() ,public Optional<com.speedment.common.codegen.model.Javadoc> getJavadoc() ,public List<com.speedment.common.codegen.model.Method> getMethods() ,public Set<com.speedment.common.codegen.model.modifier.Modifier> getModifiers() ,public java.lang.String getName() ,public Optional<HasClasses<?>> getParent() ,public int hashCode() ,public com.speedment.common.codegen.model.Class set(com.speedment.common.codegen.model.Javadoc) ,public com.speedment.common.codegen.model.Class setName(java.lang.String) ,public com.speedment.common.codegen.model.Class setParent(HasClasses<?>) <variables>private final non-sealed List<com.speedment.common.codegen.model.AnnotationUsage> annotations,private final non-sealed List<ClassOrInterface<?>> classes,private final non-sealed List<com.speedment.common.codegen.model.Field> fields,private final non-sealed List<com.speedment.common.codegen.model.Generic> generics,private final non-sealed List<com.speedment.common.codegen.model.Import> imports,private final non-sealed List<com.speedment.common.codegen.model.Initializer> initalizers,private final non-sealed List<java.lang.reflect.Type> interfaces,private com.speedment.common.codegen.model.Javadoc javadoc,private final non-sealed List<com.speedment.common.codegen.model.Method> methods,private final non-sealed Set<com.speedment.common.codegen.model.modifier.Modifier> modifiers,private java.lang.String name,private HasClasses<?> parent