Nested classes (static inner classes) : Nested Classes « Class Definition « Java Tutorial

public class MainClass {
  private static class ClassA implements A {
    private int i = 11;

    public int value() {
      return i;

  protected static class ClassB implements B {
    private String label;

    private ClassB(String whereTo) {
      label = whereTo;

    public String readLabel() {
      return label;

    // Nested classes can contain other static elements:
    public static void f() {

    static int x = 10;

    static class InnerInnerClass {
      public static void f() {

      static int x = 10;

  public static B dest(String s) {
    return new ClassB(s);

  public static A cont() {
    return new ClassA();

  public static void main(String[] args) {
    A c = cont();
    B d = dest("A");

interface A {
  int value();

interface B {
  String readLabel();

5.14.Nested Classes
5.14.1.Creating instances of inner classes
5.14.2.Nested Classes
5.14.3.Creating a new nested object outside
5.14.4.Static Nested Classes
5.14.5.Creating inner classes
5.14.6.Defining references to inner classes
5.14.7.Nesting a class within a method
5.14.8.Nesting a class within a scope.
5.14.9.Nested classes (static inner classes)
5.14.10.An inner class cannot be overriden like a method
5.14.11.Two ways that a class can implement multiple interfaces
5.14.12.Nested classes can access all members of all levels of the classes they are nested within
5.14.13.Proper inheritance of an inner class.
5.14.14.Using inner classes for callbacks
5.14.15.Returning a reference to an inner class
5.14.16.Putting test code in a nested class
5.14.17.With concrete or abstract classes, inner classes are the only way to produce the effect of multiple implementation inheritance.
5.14.18.Local inner class can have a constructor