Java Inner Class extiende la clase externa

Hay algunos casos en Java donde una clase interna extiende una clase externa.

Por ejemplo, java.awt.geom.Arc2D.Float es una clase interna de java.awt.geom.Arc2D, y también extiende Arc2D. (c.f.http: //download.oracle.com/javase/6/docs/api/java/awt/geom/Arc2D.Float.htm)

Also, sun.org.mozilla.javascript.internal.FunctionNode.Jump extiende sun.org.mozilla.javascript.internal.Node, que es una superclase de FunctionNode. (lo siento ... no puedo encontrar un enlace al javadoc)

Para mí, esto parece extraño. ¿Podrías crear estos?

new Arc2D.Float.Float() //n.b. I couldn't get this to compile in Intellij IDEA;

new FunctionNode.Jump.Jump.Jump(1); // I could get this to compile

¿Para qué sirve tener una subclase anidada como una clase interna de la superclase?

Me preguntaba si era acceder a algo en la superclase, pero si desea acceder a alguna variable / método en el padre, puede usar

super.variable;

super.method();

Edit 1: jjnguy ha sugerido que se mantenga la lógica en el mismo lugar. En cuyo caso, ¿por qué no escribirías un archivo com.mypackage.AbstractTest:

abstract class AbstractTest {
  abstract String getString();
}

class ExtensionTest extends AbstractTest {
  @Override
  String getString() {
    return "hello world";
  }
}

... más bien que

abstract class AbstractTest {
  abstract String getString();

  class ExtensionTest extends AbstractTest {
    @Override
    String getString() {
      return "hello world";
    }
  }
}

Edit 2: se ha señalado correctamente que la sugerencia en mi edición anterior era defectuosa, ya que no se pudo construir ExtensionTest fuera del paquete. Sin embargo, he pensado más sobre esto durante el fin de semana, entonces, ¿qué pasa con lo siguiente:

abstract class Test {
  public class ExtensionTest extends AbstractTest {
    @Override
    String getString() {
      return "hello world";
    }
  }

  private abstract class AbstractTest {
    abstract String getString();
  }
} 

En esencia, la mejor respuesta que he visto hasta ahora es que tener una clase interna que extienda su clase externa permite que la lógica se agrupe. Sin embargo, creo que esto se puede hacer sin la extensión.

En mi opinión, parece un mal diseño tener una clase que pueda tener un número infinito de las mismas subclases anidadas dentro de ella. (Contexto: esto surgió al intentar producir un diccionario para una utilidad de finalización de código, y arrojó una StackOverflowException. Encontré una solución, pero no puedo entender por qué se había diseñado de esa manera).

Respuestas a la pregunta(3)

Su respuesta a la pregunta