Difference between static nested class and inner class

πŸ’‘ Concept: Static Nested vs Inner Class

Static nested classes are declared static and do not require an instance of the outer class; inner classes are associated with an instance of the outer class.

πŸ“˜ Quick Intro

The main difference lies in how they access members of the outer class and their instantiation.

🧠 Analogy

Static nested class is like a standalone tool inside a toolbox, while inner class is a tool that needs the toolbox to function.

πŸ”§ Technical Explanation

  • Static nested classes do not have access to instance variables of the outer class.
  • Inner classes can access instance variables and methods of the outer class.
  • Static nested classes are instantiated without an outer class instance.
  • Inner classes require an instance of the outer class to be instantiated.
  • Static nested classes behave like top-level classes nested for packaging convenience.

🎯 Use Cases

  • βœ… Use static nested class for helper classes that don’t need outer class instance.
  • βœ… Use inner class when you need to access outer instance members.
  • βœ… Helps encapsulate helper classes inside outer class.

πŸ’» Example: Static Nested vs Inner Class


public class Outer {
    private int data = 10;

    static class StaticNested {
        void display() {
            System.out.println("Static nested class");
        }
    }

    class Inner {
        void display() {
            System.out.println("Inner class data: " + data);
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Outer.StaticNested sn = new Outer.StaticNested();
        sn.display();

        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.display();
    }
}

❓ Interview Q&A

Q1: What is a static nested class?
A: A class declared static inside another class.

Q2: How is it different from an inner class?
A: Static nested does not require outer instance; inner does.

Q3: Can static nested access outer instance variables?
A: No.

Q4: Can inner classes access outer instance variables?
A: Yes.

Q5: How to instantiate inner classes?
A: Using outer.new Inner().

Q6: Are static nested classes recommended?
A: Yes, for better encapsulation.

Q7: Can static nested classes implement interfaces?
A: Yes.

Q8: Are inner classes type-safe?
A: Yes.

Q9: Can static nested classes access static members?
A: Yes.

Q10: Difference in memory usage?
A: Static nested uses less memory as no outer instance.

πŸ“ MCQs

Q1. What is a static nested class?

  • Class inside another class
  • Static class inside another class
  • Inner class
  • Interface

Q2. Difference from inner class?

  • Same
  • No outer instance needed
  • Requires outer instance
  • None

Q3. Can static nested access outer instance variables?

  • Yes
  • No
  • Sometimes
  • Depends

Q4. Can inner classes access outer instance variables?

  • No
  • Yes
  • Maybe
  • Depends

Q5. How to instantiate inner class?

  • Using new Inner()
  • Using outer.new Inner()
  • Using Outer.Inner()
  • Using Inner()

Q6. Are static nested classes recommended?

  • No
  • Yes
  • Sometimes
  • Rarely

Q7. Can static nested classes implement interfaces?

  • No
  • Yes
  • Sometimes
  • Never

Q8. Are inner classes type-safe?

  • No
  • Yes
  • Maybe
  • Depends

Q9. Can static nested classes access static members?

  • No
  • Yes
  • Maybe
  • Depends

Q10. Difference in memory usage?

  • More memory
  • Less memory
  • Same
  • Unknown

πŸ’‘ Bonus Insight

Understanding the difference helps write better encapsulated and memory efficient Java code.

πŸ“„ PDF Download

Need a handy summary for your notes? Download this topic as a PDF!

πŸ” Navigation

πŸ’¬ Feedback
πŸš€ Start Learning
Share:

Tags: