Classes internes en Java

Java 对象和类Objets et classes Java

Dans ce chapitre, nous allons découvrir les classes internes Java.

En Java, une classe peut en imbriquer une autre. La syntaxe est la suivante :

class OuterClass {   // 外部类
    // ...
    class NestedClass { // 嵌套类,或称为内部类
        // ...
    }
}

Pour accéder à la classe interne, vous pouvez créer un objet de la classe externe, puis créer un objet de la classe interne.

Il existe deux types de classes imbriquées :

  • Classe interne non statique
  • Classe interne statique

Classe interne non statique

Une classe interne non statique est une classe imbriquée dans une autre classe. Elle a accès aux membres de la classe externe et est souvent appelée classe interne.

Comme la classe interne est imbriquée dans la classe externe, vous devez d'abord instancier la classe externe, puis créer un objet de la classe interne.

Exemple

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

La sortie de l'exemple ci-dessus est :

15

Classe interne privée

Les classes internes peuvent être modifiées avec private ou protected. Si vous ne voulez pas que la classe interne soit accessible depuis l'extérieur de la classe externe, vous pouvez utiliser le modificateur private :

Exemple

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

Dans l'exemple ci-dessus, InnerClass est définie comme une classe interne privée, et son exécution entraînera une erreur :

MyMainClass.java:12: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
             ^

Classe interne statique

Les classes internes statiques peuvent être définies à l'aide du mot-clé static. Pour les classes internes statiques, nous n'avons pas besoin de créer une classe externe pour y accéder ; nous pouvons y accéder directement :

Exemple

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

La sortie de l'exemple ci-dessus est :

5

Remarque :Les classes internes statiques ne peuvent pas accéder aux membres de la classe externe.

Accéder aux membres de la classe externe depuis une classe interne

Une utilisation avancée des classes internes est qu'elles peuvent accéder aux propriétés et méthodes de la classe externe :

Exemple

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

La sortie de l'exemple ci-dessus est :

10

Java 对象和类Objets et classes Java

Autres extensions