Java Innerlijke Klassen


Java Innerlijke Klassen

In Java is het ook mogelijk om klassen te nesten (een klasse binnen een klasse). Het doel van geneste klassen is om klassen te groeperen die bij elkaar horen, waardoor uw code beter leesbaar en onderhoudbaar wordt.

Om toegang te krijgen tot de innerlijke klasse, maakt u een object van de buitenste klasse en maakt u vervolgens een object van de innerlijke klasse:

Voorbeeld

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

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

// Outputs 15 (5 + 10)


Privé innerlijke klasse

In tegenstelling tot een "gewone" klasse, kan een innerlijke klasse privateof zijn protected. Als u niet wilt dat externe objecten toegang krijgen tot de binnenste klasse, declareert u de klasse als private:

Voorbeeld

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

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

Als u probeert toegang te krijgen tot een privé-binnenklasse vanuit een externe klasse, treedt er een fout op:

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



Statische innerlijke klasse

Een inner class kan ook zijn static, wat betekent dat je er toegang toe hebt zonder een object van de outer class te maken:

Voorbeeld

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

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

// Outputs 5

Opmerking: net als staticattributen en methoden heeft een staticinner class geen toegang tot leden van de outer class.


Toegang tot buitenklasse vanuit binnenklasse

Een voordeel van innerlijke klassen is dat ze toegang hebben tot attributen en methoden van de buitenste klasse:

Voorbeeld

class OuterClass {
  int x = 10;

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

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

// Outputs 10