Inner classes are classes that are defined within another class.
● Member inner classes: These classes are defined within another class and have access to the instance variables and methods of the enclosing class.
● Local inner classes: These classes are defined within a method and have access to the final variables of the enclosing method.
● Anonymous inner classes: These classes are defined without a name and are typically used to provide a single-method implementation.
Let us look into the example of these three:
Member Inner Class
class MyOuterClass {
private int x;
class MyInnerClass {
public void printX() {
System.out.println(x);
}
}
}
This example defines an inner class called MyInnerClass within the MyOuterClass. The MyInnerClass has access to the private variable x of the MyOuterClass.
Local Inner Class:
class MyOuterClass {
public void printSquare(final int x) {
class Square {
public void print() {
System.out.println(x*x);
}
}
Square s = new Square();
s.print();
}
}
This example defines a local inner class called Square within the printSquare method of the MyOuterClass. The Square class has access to the final variable x of the printSquare method.
Anonymous Inner Class:
class MyOuterClass {
public void performAction(final int x) {
new Action() {
public void execute() {
System.out.println(x*x);
}
}.execute();
}
interface Action {
public void execute();
}
}
This example defines an anonymous inner class that implements the Action interface within the performAction method of the MyOuterClass. The anonymous inner class has access to the final variable x of the performAction method.
Inner classes are often used to encapsulate functionality within a class or to provide additional functionality to a class. They can also be useful when working with events, as they can be used to define event handlers.