Java Inner Classes

Java Inner Classes

An inner class in Java is a class defined inside another class. It is used to logically group classes that are only used in one place, improve encapsulation, and increase readability.

Inner classes have access to the outer class members, even private ones.


Types of Inner Classes in Java

Inner Class Type Description
Member Inner Class Regular inner class inside another class
Static Inner Class Can be accessed without creating an object of the outer class
Local Inner Class Defined inside a method
Anonymous Inner Class Class without a name, usually used with interfaces or overriding


1️⃣ Member Inner Class

class Outer {
private String msg = "Hello from Outer Class";
class Inner {
void display() {
System.out.println(msg); // can access outer private data
}
}
}public class Main {
public static void main(String[] args) {
Outer.Inner obj = new Outer().new Inner();
obj.display();
}
}

📌 Output:

Hello from Outer Class

2️⃣ Static Inner Class

  • Behaves like a static member.

  • Can be accessed without creating an instance of the outer class.

class Outer {
static class Inner {
void show() {
System.out.println("Inside Static Inner Class");
}
}
}
public class Main {
public static void main(String[] args) {
Outer.Inner obj = new Outer.Inner();
obj.show();
}
}

📌 Output:

Inside Static Inner Class

3️⃣ Local Inner Class (Inside a Method)

class Outer {
void outerMethod() {
class Inner {
void message() {
System.out.println("Local Inner Class Executed");
}
}
Inner obj = new Inner();
obj.message();
}
}
public class Main {
public static void main(String[] args) {
new Outer().outerMethod();
}
}

📌 Output:

Local Inner Class Executed

4️⃣ Anonymous Inner Class

Used when a class is needed only once, especially to override a method.

abstract class Animal {
abstract void sound();
}
public class Main {
public static void main(String[] args) {
Animal obj = new Animal() {
void sound() {
System.out.println(“Dog barks (Anonymous Class)”);
}
};
obj.sound();
}
}

📌 Output:

Dog barks (Anonymous Class)


🎯 Advantages of Inner Classes

✔ Better encapsulation
✔ Logical grouping of classes
✔ More readable and maintainable code
✔ Can access outer class private members


⚠ Notes

Type Needs Outer Object? Can be static?
Member Inner Class ✔ Yes ✖ No
Static Inner Class ✖ No ✔ Yes
Local Inner Class ✔ Yes (inside method) ✖ No
Anonymous Inner Class Depends ✖ No

⭐ Summary

Inner classes allow:

➡ Better structure
➡ Encapsulation
➡ Reusability
➡ Flexibility (especially anonymous class with overriding)

You may also like...