Inner Classes


The Java programming language allows you to define a class within a class. Such a class is called a nested class or inner class.
The advantage of nested classes are used to develop more readable and maintainable code because it logically grouped with in the classes.


Types of Inner classes

There are two type of inner classes
1.      Static inner class
2.      Non-static inner class

Static inner class
Static inner class is declared with static modifier, refer below code snippet-

/**
 * In this example outter class contains StaticInner class
 * @author Manoj
 */
public class OutterClass {

  public static void main(String[] args) {
     OutterClass.StaticInner staticInner = new OutterClass.StaticInner();
     System.out.println(staticInner.getValue());
  }

  static class StaticInner {
     public String getValue() {
           return "I am static inner class";
     }
  }
}

Non-static inner class-
There are three type of non-static inner class.
1.      Member class
2.      Local class
3.      Anonymous class

Member class
Member class are also define as a member of class, they can access all methods and members of outter class. Refer below code snippet-

/**
 * In this example outter class contains member Inner class
 * @author Manoj
 */
public class OutterClass {

  public static void main(String[] args) {
     OutterClass.MemberInner memberInner = new OutterClass().new MemberInner ();
     System.out.println(memberInner.getValue());
  }

   class MemberInner {
     public String getValue() {
           return "I am member inner class";
     }
  }
}

Local class
Local classes are declared within a block of code or with in a method and are visible only within that block or method, refer below code snippet –

/**
 * In this example outter class contains method local Inner class
 * @author Manoj
 */
public class OutterClass {
  public static void main(String[] args) {
     class LocalInner {
           public String getValue() {
                return "I am in a method local inner class";
           }
     }
     LocalInner localInner = new LocalInner();
     System.out.println(localInner.getValue());
  }
}
Note – Method local inner class can access only final local variable

Anonymous class
An anonymous class is a local class that has no name.
Code snippet for anonymous class-

/**
 * In this example we are creating an anonymous class
 * @author Manoj
 */
public class OutterClass {
  public static void main(String[] args) {
     Runnable runnable = new Runnable() {
           public void run() {
                System.out.println("I am anonymous class");
           }
     };
     runnable.run();
  }
}



1 comment: