Java Inner Class étend la classe externe

Dans certains cas, de Java où un intérieur classe étend extérieur de la classe.

Par exemple, java.awt.geom.Arc2D.Float est un intérieur de classe de java.awt.geom.Arc2D,
et s'étend également Arc2D.
(c.f. http://download.oracle.com/javase/6/docs/api/java/awt/geom/Arc2D.Float.html)

Aussi, le soleil.org.mozilla.le javascript.interne.FunctionNode.Saut s'étend soleil.org.mozilla.le javascript.interne.Nœud, qui est une super-classe de FunctionNode.
(désolé... impossible de trouver un lien vers la javadoc)

Pour moi, cela me semble bizarre. Pourriez-vous ensuite de créer ces?

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

Quel but a-t-elle d'avoir une sous-classe imbriquée à l'intérieur d'une classe de super-classe?

Je me demandais si c'était d'accéder à quelque chose dans la super-classe, mais si vous voulez accéder à toutes les variables/méthodes dans le parent, vous pouvez utiliser

super.variable;

ou

super.method();

Edit 1:
jjnguy a proposé c'est de garder la logique dans le même endroit. Dans ce cas, pourquoi ne pas vous écrire un fichier com.mypackage.AbstractTest:

abstract class AbstractTest {
  abstract String getString();
}

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

... au lieu de:

abstract class AbstractTest {
  abstract String getString();

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

Edit 2:
Il a été, à juste titre souligné que la suggestion de mon édition précédente a été entaché d'irrégularités, comme il ne pouvait pas construire ExtensionTest à l'extérieur de l'emballage. Cependant, j'ai eu un encore penser à propos de ce cours du week-end, ainsi que sur les éléments suivants:

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

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

En essence, la meilleure réponse que j'ai vu jusqu'à présent est que le fait d'avoir un intérieur de classe étendre l'extérieur de la classe permet à la logique de les regrouper. Cependant, je pense que cela peut être fait sans l'extension.

Dans mon esprit, il semble que mauvais design afin d'avoir une classe qui peut avoir un nombre infini d'un même sous-classes imbriquées. (Contexte: c'est venu tout en essayant de produire un dictionnaire pour un code d'achèvement de l'utilitaire, et jeta un StackOverflowException. J'ai trouvé une solution de contournement, mais je n'arrive pas à comprendre pourquoi il avait été conçu de cette façon.)

source d'informationauteur amaidment