JavaAn Introduction to Inner Classes in Java

An Introduction to Inner Classes in Java

Developer.com content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Java Developer Tutorials

An inner class in Java is defined as a class that is declared inside another class. Inner classes are often used to create helper classes, such as views or adapters that are used by the outer class. Inner classes can also be used to create nested data structures, such as a linked list. Nested data structures can be more efficient than flat data structures and can lead to better code organization.

Inner classes can be either static or non-static. A static inner class is one that is declared with the static keyword. A non-static inner class is one that is not declared with the static keyword.

We will be looking at how to work with Inner Classes in this Java programming tutorial. Code examples will be provided to help make the learning process easier.

Read: The Top Java IDEs

What are Inner classes in Java?

Inner classes in Java are declared inside another class (also called the outer class) and can access private members of the outer class. The compiler generates a class that is a member of the outer class, and it’s this generated class that has access to private variables or methods in the scope where it was created (e.g., inside another method).

Static nested inner classes are similar to other static members because they have no access to the instance variables of the outer class. In contrast, non-static inner classes can access the instance variables of the outer class, and are therefore able to create instances of the outer class.

Benefits and Downsides of Inner Classes in Java

Inner classes in Java offer a number of benefits over traditional classes. They can be used to access private members of an outer class, they can be used to create instances of an outer class, and they can be used to create anonymous inner classes.

However, there are also some downsides to using inner classes in Java. They can make your code more difficult to read and debug, and they can increase the complexity of your code overall.

Types of Inner Classes

Inner classes are classified into four types: static, non-static, local and anonymous.

Static Inner Classes

These are the simplest type of inner classes. Static inner classes are those that are declared inside a class and marked static. It should be noted that these classes can only be accessed using an instance of the outer class. You can take advantage of static nested classes for grouping related classes together.

Non-static Inner Classes

A non-static inner class as the name suggests, is associated with an instance of an outer class. All the members (variables and methods) of the outer class are accessible from these classes.

Local Inner Classes

Local inner classes are defined within a method. They have access to all the members (variables and methods) of the enclosing class but they cannot be instantiated from outside the method in which they are defined. An inner class defined locally may only be instantiated inside its method where it has been defined.

A method local inner class is accessible only within the method in which it was defined, and cannot be referenced by any other code outside the method in which it is defined. A method local inner class can access local variables from the enclosing scope (including final variables).

Anonymous Inner Classes

Inner classes that don’t have names are also known as anonymous inner classes. Both the declaration and instantiation of an anonymous inner class occur simultaneously. Anonymous inner classes cannot have explicit constructors, just like all local inner classes. Anonymous inner classes are useful when you have to use a local inner class only once.

Read: String Objects in Java

Important Points on Inner Classes in Java

The following are some important things to remember when working with Inner classes in Java:

  • An inner class can be declared as public, private, or protected.
  • An inner class can extend any class and implement any interface.
  • It should be noted that if an inner class has been marked as static, it cannot access non-static members of the outer class. It can access static members of the outer class.
  • You cannot create an instance of an inner or nested class without an instance of the outer class.
  • Inner classes can be used to write more modular and reusable code.

Why Do Developers Need Inner Classes?

Inner classes are used for a variety of purposes:

  • Developers can use these classes to create objects that are associated with a particular instance of an outer class. As an example, you can take advantage of inner classes to implement the Singleton pattern with lazy initialization.
  • To access private members of the outer class.
  • To organize code in a better way.

How to Program Inner Classes in Java

The following code example illustrates how you can implement inner classes in Java:

public class MyOuterClass {
  public class MyInnerClass {
    public void display() {
      System.out.println("Inside the inner class");
    }
  }
  public static void main(String[] args) {
    MyOuterClass objOuterClass = new MyOuterClass();
    MyOuterClass.MyInnerClass objInnerClass = objOuterClass.new MyInnerClass();
    objInnerClass.display();
  }
}

The following code listing illustrates how you can implement a static inner class in Java:

import java.util.*; 
class MyOuterClass {
    private static void methodA()
    {
        System.out.println("Inside methodA of MyOuterClass");
    }
    static class MyInnerClass {
 
        public static void methodB()
        {
            System.out.println("Inside methodB of MyInnerClass");
            methodA();
        }
    }
} 

public class InnerClassDemo {
    public static void main(String args[])
    {
        MyOuterClass.MyInnerClass obj = new MyOuterClass.MyInnerClass();
        obj.methodB();
    }
}

Read: Classes and Objects in Java

Final Thoughts on Inner Classes in Java

An inner class (also known as a nested class), is a special type of class that is defined within another class. Inner classes are used for various purposes, such as to create an instance of an object that is associated with the outer class, or to access members of the outer class. In general, inner classes are used to improve the organization and readability of code. Inner classes offer a lot of flexibility and can be very useful in many different situations. When used correctly, they can lead to cleaner and more maintainable code.

Read more Java programming tutorials and guides to software development.

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Latest Posts

Related Stories