Nested, Local and Anonymous Classes
Nested Class
In Java, defining a class within another class is allowed. Nested classes can be either static or non-static. Primary purpose of nested classes is logically grouping related classes in one place and improving encapsulation.
public class OuterClass {
String myName = "outerClass";
private class InnerClass {
String myName = "innerClass";
void printName() {
System.out.println("I am " + myName);
}
}
void sayName() {
InnerClass ic = new InnerClass();
ic.printName();
System.out.println("I am " + myName);
}
}
Note - Top level class cannot be declared static and also can only be marked public or package private
Local Classes
Class that is defined in a block ( statements between balanced curly braces )
class Test {
public void method(){
// local class
class local{
String name="arjit";
public void print(){
System.out.println("my name is " + name);
}
}
}
}
Anonymous Class
An anonymous class is like a local class except they don’t have a name. Intended for one time use.
Ex - Anonymous class implementing comparator interface
Comparator myCustomComparator = new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return (int)Math.pow(-1, i1) * (i1 - i2);
}
};
PriorityQueue<Integer> q = new PriorityQueue<Integer>(myCustomComparator);