Inner class is defined inside a class as name suggests.
So it might be used to define some new datatype used by any method or anything inside the class and won'nt have to be used outside the class.just like methods and variables inside a class.
I will give you an example -
Inside a class - in a method , i am doing some sorting like Collections.sort() and i need to define my comparator for me which wont be used outside that class.
So before doing sort() i define a class implementing comparator interface and used in comparator .
This inner class wont be visible outside outer class.
Lucky, to make the inner class really invisible outside the enclosing class, you'll have the make it private. And if it doesn't need to access member variables or non-static methods from the enclosing class, it's also a good idea to make it static. Like this: