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.
There are four types of inner classes are present
inner classes
The scope of method local inner classes is the scope of the method where it is declared.
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();
}
}
anonymous inner classes
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
By using parent class names