Last Updated : 23 Jul, 2025
Java allows a class to be defined within another class. These are called Nested Classes. Classes can be static which most developers are aware of, henceforth some classes can be made static in Java. Java supports Static Instance Variables, Static Methods, Static Block, and Static Classes. The class in which the nested class is defined is known as the Outer Class. Unlike top-level classes, Nested classes can be Static. Non-static nested classes are also known as Inner classes.
Note: The top level class cannot be static in java, to create a static class we must create a nested class and then make it static.
An instance of an inner class cannot be created without an instance of the outer class. Therefore, an inner class instance can access all of the members of its outer class, without using a reference to the outer class instance. For this reason, inner classes can help make programs simple and concise.
Differences between Static and Non-static Nested ClassesRemember: In static class, we can easily create objects.
The following are major differences between static nested classes and inner classes.
Below is the implementation of topic mentioned above:
Java
// Java program to Demonstrate How to
// Implement Static and Non-static Classes
// Class 1
// Helper class
class OuterClass {
// Input string
private static String msg = "GeeksForGeeks";
// Static nested class
public static class NestedStaticClass {
// Only static members of Outer class
// is directly accessible in nested
// static class
public void printMessage()
{
// Try making 'message' a non-static
// variable, there will be compiler error
System.out.println(
"Message from nested static class: " + msg);
}
}
// Non-static nested class -
// also called Inner class
public class InnerClass {
// Both static and non-static members
// of Outer class are accessible in
// this Inner class
public void display()
{
// Print statement whenever this method is
// called
System.out.println(
"Message from non-static nested class: "
+ msg);
}
}
}
// Class 2
// Main class
class GFG {
// Main driver method
public static void main(String args[])
{
// Creating instance of nested Static class
// inside main() method
OuterClass.NestedStaticClass printer
= new OuterClass.NestedStaticClass();
// Calling non-static method of nested
// static class
printer.printMessage();
// Note: In order to create instance of Inner class
// we need an Outer class instance
// Creating Outer class instance for creating
// non-static nested class
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner
= outer.new InnerClass();
// Calling non-static method of Inner class
inner.display();
// We can also combine above steps in one
// step to create instance of Inner class
OuterClass.InnerClass innerObject
= new OuterClass().new InnerClass();
// Similarly calling inner class defined method
innerObject.display();
}
}
Message from nested static class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks Message from non-static nested class: GeeksForGeeks
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4