Java Inner Class estende a Outer Class

xistem alguns casos em Java em que uma classe interna estende uma classe extern

Por exemplo, java.awt.geom.Arc2D.Float é uma classe interna de java.awt.geom.Arc2D e também estende o Arc2D. (c.f.http: //download.oracle.com/javase/6/docs/api/java/awt/geom/Arc2D.Float.htm)

Além disso, sun.org.mozilla.javascript.internal.FunctionNode.Jump estende sun.org.mozilla.javascript.internal.Node, que é uma superclasse de FunctionNode. (desculpe ... não consigo encontrar um link para o javadoc)

Para mim, isso parece estranho. Você poderia criá-los?

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

Qual é a finalidade de aninhar uma subclasse como uma classe interna da superclass

Eu me perguntei se era para acessar algo na superclasse, mas se você quisesse acessar alguma variável / método no pai, poderia usar

super.variable;

o

super.method();

Edit 1: jjnguy sugeriu que é manter a lógica no mesmo lugar. Nesse caso, por que você não gravaria um arquivo com.mypackage.AbstractTest:

abstract class AbstractTest {
  abstract String getString();
}

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

... ao invés de

abstract class AbstractTest {
  abstract String getString();

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

Edit 2: Foi corretamente apontado que a sugestão na minha edição anterior foi falha, pois não foi possível construir o ExtensionTest fora do pacote. No entanto, eu pensei mais sobre isso no fim de semana, e o que se segue:

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

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

Em essência, a melhor resposta que eu vi até agora é que ter uma classe interna estender sua classe externa permite que a lógica seja agrupada. No entanto, acho que isso pode ser feito sem a extensão.

Na minha opinião, parece um projeto ruim ter uma classe que pode ter um número infinito das mesmas subclasses aninhadas dentro dela. (Contexto: isso surgiu enquanto tentava produzir um dicionário para um utilitário de conclusão de código e lançou uma StackOverflowException. Encontrei uma solução alternativa, mas não consigo entender por que ele foi projetado dessa maneira.)

questionAnswers(3)

yourAnswerToTheQuestion