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 private
of 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 static
attributen en methoden heeft een static
inner 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