March 28, 2010

Inner classes in Java

1. What is inner class and when we should go for inner classes?
Some times we can declare a class inside another class such type of classes are called inner classes
        Example
        Class Car{
      //more code here
      Class Engine{
            //more code here
      }
     }
Without existing Car object there is no chance of existing Engine object, hence Engine class has declared inside Car class. 
 
2.How many types of inner classes are present?
There are four types of inner classes are present
    • Normal or regular inner class
    • Method local inner class
    • Anonymous inner class
    • Static nested  class

3.What is method local inner class?
  • Sometimes we can declare a class inside a method such type of classes are called method local   inner  classes
  • The main purpose of method local inner classes is to define method specific functionality
    The scope of method local inner classes is the scope of the method where it is declared.
  • This is the mostly rarely used type of inner classes.
           Example 
           class Test{
      public  void  m1(){
               class Inner {
                               public void sum(int I,int j){
                  System.out.println(i+J);
            }//sum
             }//inner
            Inner  i=new Inner();
            i.sum(10,20);
            //more code here 
           I.sum(100,303);
           //more code here
         i.sum(102,84);
        }//m1()
   Public  static  void main(){
      New Test().m1();
}
}

4.What is anonymous inner class?
  • Some times we can declare a inner class without name such type of inner classes are called   
    anonymous inner classes
  • Anonymous inner classes can be divided into 3 categories
        • Anonymous inner class that extends a class
        • Anonymous inner class that implements an interface
        • Anonymous inner class that defines inside a method argument
            ANONYMOUS INNER CLASS THAT EXTENDS A CLASS
            Example
            Class popcorn{
                  Public void taste(){
                        System.out.println(“it is salty”);
                  }
                  //more code here
            }
            Class Test{
                  Public static void main(String[] args)
                        {
                        Popcorn p=new Popcorn()
                        {    // here we are creating child class for popcorn
                Public void taste(){
                System.out.println(“it is sweet”);
                              }
          };//here semicolon indicates we r creating child class object with parent    
          // class reference here child class dosent contain name
                  p.taste()// it is sweet
                  Popcorn p=new Popcorn();
                  p1.taste() //it is salty
                  }
            }

 
    ANONYMOUS INNER CLASS THAT IMPLEMENTS AN INTERFACE
    example
      class Test{
               Public static void main(String[] args){
            Runnable r=new Runnable(){
                  Public void run(){
                         for(int i=0;i<10;i++){
                        System.out.printin(“child thread”);
               }
        }
            };
          Thread t=new Thread(r);
            t.start();
            for(int i=0;i<10;i++){
                  System.out.printin(“main thread”);
          }
      }
      }
      Don’t become fool that here we are creating object of interface Runnable.Here we are actually
               creating an object of class that is  implemented Runnable interface.
      ANONYMOUS INNER CLASS THAT DEFINES INSIDE A METHOD ARGUMENT
      Example
      Class Test{
                      Public static void main(String[] args){
                  New Thread(new Runnable()
                                                                       {
                                    Public void run(){
                                    for(int i=0;i<10;i++){
                                          System.out.printin(“child thread”);
                  }
                                    }
                                     }).start();
                              for(int i=0;i<10;i++){
                  System.out.printin(“main thread”);
                         }
                  }//main
            }//Test 
 
5. With out having name of class how we can create an object and utilize the functionality of Anonymous  inner class?
   By using parent class names 
6. What is difference between anonymous inner class and general class?
  • A general class can extend only one class at a time of course inner class can extend only one class at a  Time.
  • A general class can implement any no of interfaces at a time but a anonymous inner class can
  • implement only one interface at a time
  • A general class can extend a class and can implement an interface simultaneously but an
    anonymous inner class can extend a class or can implement an interface one at a time but not
    both simualtaneously 
7. What is difference between normal inner class and static nested class?
       
Normal Inner Class Static Nested Class
  1. Inner class object always associated with outer class object ie without existing outer class object    there is no chance of existing inner class object.
  1. Nested class object never associated with
       outer class object , ie  without existing outer class object inner class object can exist
  1. Inside normal inner class we cant declare static members.
  1. Inside static nested class can
         declare static members
  1. We cant place main method in normal inner class and hence innocation of inner class directly from   command prompt is not possible.
  1. We can place main method in static nested class and    hence  innocation of nested class directly from command prompt is possible
  1. From normal inner class we can access both static and non static members of outer class.
  1. From static nested class we can access only static member of outer class

8.What is static nested calss?why the term nested instead of inner in static nested class?
      Some times we can declare inner class with static modifier such type of inner  class are called static
       nested classes.the term nested instead of static because without existing outer class object inner
       class object can exist.
       Example
      Class outer{
      Static class Nested{
            Public static void main(String[] args){
                  System.out.println(“nested class main()”);
            }
      }
      Public static void main(String[] args){
            System.out.println(“outer class main()”);
      }
}
  • Java Outer
    O/P
    Outer class main()
  • Java Outer$Nested
      O/P
    Nested class main()       
     9. Inside inner class is it possible to declare main()?
          No it is not possible to declare main () inside inner class but in static nested class it is possible for 
        Example refer above code

1 comment:

  1. Υοur style is unique compared to othеr people I've read stuff from.
    Manу thanks for рosting when you've got the opρortunіty,
    Guеѕs I will јust bοoκmark this pagе.


    Also visit my wеb blog :: http://www.bofigo.com/philips-avent-gogus-kalkani-2-li-urun11502.html ()

    ReplyDelete

I'm certainly not an expert, but I'll try my hardest to explain what I do know and research what I don't know.

My Favorite Site's List

#update below script more than 500 posts