Local Inner Classes

Syntex Of Local Inner Class

[access-specifier] class OuterClass {
    code...
    [access-specifier] return-type MethodName(arguments){
        class LocalInnerClass{
            code...
        }
        code...
    }
    code...
}
  • Local inner classes is declared inside a code block or method.
  • Local inner classes are never declared with an access modifiers like public, protected, private, default. Their scope is always restricted to the block in which they are declared.
  • Local inner classes are completely hidden from the outside code.
  • Local inner classes not only access the instance variables but local variables of the method as well. It can only access the final local variables of its containing method.
  • You can only use final modifier with local inner class.


Local Inner Class Example
class Outer {
    int x;
    Outer() {
        x = 100;
    }
    void show(){
        class LocalInner{
		void msg(){
			System.out.println("The value is = "+x);
		}
	   }
	LocalInner li = new LocalInner();
	li.msg();
    }
}
public class InnerDemo {
    public static void main(String[] args) {
        Outer obj = new Outer();
		obj.show();
    }
}
Output
The value is = 100

Anonymous Inner Classes

A class that has no name is known as anonymous inner class. They enable you to declare and instantiate a class at the same time. They are like local classes except that they do not have a name. Use them if you need to use a local class only once.

Syntax Of Anonymous Inner Class

HelloWorld hello = new HelloWorld() {
            String name = "Hello World";
            public void greeting() {
                System.out.println(name);
           }


Anonymous Inner Class Example
abstract class Employ{
	abstract void salary();
}

public class InnerDemo {
    
    public static void main(String[] args) {
        Employ emp = new Employ(){
		void salary(){
			System.out.println("Employ Salary");
			}
	   };
	   emp.salary();
    }
}
Output
Employ Salary