Java Inner Classes
In Java, we can nest a class within a class. The purpose of nested classes is to group classes that belong together, which make your code more readable and maintainable.
To access the inner class, we first create a object for outer class and then create a object for inner class with the outside object class.
Example
In the below example we create OuterClass.java and a main class Java file as shown below:
OuterClass.java
public class OuterClass { String outerString = "Welcome to"; class InnerClass { String innerString = "SparkDatabox"; } }
JavaInnerClassesExample.java
public class JavaInnerClassesExample { public static void main (String args[]){ OuterClass myOuter = new OuterClass(); OuterClass.InnerClass myInner = myOuter.new InnerClass(); System.out.println(myOuter.outerString +" "+myInner.innerString); } }
Output
Welcome to SparkDatabox
Example Explained
Private Inner Class
Unlike “regular” classes, an inner class can be “private” or “protected”. If we don’t want the outside objects to access the inner class, declare the class as “private”:
Example
In the below example, the inner class is “private” and if we try to access the inner class, then we get the error message as shown below:
OuterClass.java
public class OuterClass { String outerString = "Welcome to"; private class InnerClass { String innerString = "SparkDatabox"; } }
JavaInnerClassesExample.java
public class JavaInnerClassesExample { public static void main (String args[]){ OuterClass myOuter = new OuterClass(); OuterClass.InnerClass myInner = myOuter.new InnerClass(); System.out.println(myOuter.outerString +" "+myInner.innerString); } }
Error message
The type OuterClass.InnerClass is not visible
The type OuterClass.InnerClass is not visible
at practices.JavaInnerClasses.main(JavaInnerClasses.java:6)
Static Inner class
An inner class can also be static so that it can be accessed without creating an object of the outer class.
Example
OuterClass.java
public class OuterClass { String outerString = "Welcome to"; static class InnerClass { String innerString = "SparkDatabox"; } }
JavaInnerClassesExample.java
public class JavaInnerClassesExample { public static void main (String args[]){ OuterClass.InnerClass myInner = new OuterClass.InnerClass(); System.out.println(myInner.innerString); } }
Output
SparkDatabox
Access Outer Class from Inner Class
The outer class attributes and methods can be accessed from inner class.
Example
In the below example, we access the outer class attribute from the inner class method.
OuterClass.java
public class OuterClass { String outerString = "SparkDatabox"; class InnerClass { public String innerMethod(){ return outerString; } } }
JavaInnerClassesExample.java
public class JavaInnerClassesExample { public static void main (String args[]){ OuterClass myOuter = new OuterClass(); OuterClass.InnerClass myInner = myOuter.new InnerClass(); System.out.println(myInner.innerMethod()); } }
Output
SparkDatabox