code: protected void overrideAllMethods(MethodBodyCreator override) {
          Class<?> currentClass = getSuperClass();
          while (currentClass != null && currentClass != Object.class) {
              ClassMetadataSource data = reflectionMetadataSource.getClassMetadata(currentClass);
              for (Method method : data.getDeclaredMethods()) {
                  // do not override static or private methods
                  if (Modifier.isStatic(method.getModifiers()) || Modifier.isPrivate(method.getModifiers())) {
                      continue;
                  }
                  MethodIdentifier identifier = MethodIdentifier.getIdentifierForMethod(method);
                  // don't attempt to override final methods
                  if (Modifier.isFinal(method.getModifiers())) {
                      continue;
                  }
                  if (!SKIP_BY_DEFAULT.contains(identifier)) {
                      overrideMethod(method, identifier, override);
                  }
              }
              currentClass = currentClass.getSuperclass();
          }
      }
docs: Overrides all methods on the superclass with the exception of <code>equals(Object)</code>, <code>hashCode()</code>,
  <code>toString()</code> and <code>finalize()</code>. The given {@link MethodBodyCreator} is used to generate the class
  body.
  <p/>
  Note that private methods are not actually overridden, and if the sub-class is loaded by a different ClassLoader to the
  parent class then neither will package-private methods. These methods will still be present on the new class however, and
  can be accessed via reflection
  
  @param override the method body creator to use