Program of local inner class:
class LocalInner{ private String message = "dineshonjava.com";//instance variable void display(){ class Local{ void msg(){ System.out.println(message); } } Local loc = new Local(); loc.msg(); } public static void main(String args[]){ LocalInner obj = new LocalInner(); obj.display(); } }
output:
After compiling we will get the following class files
Internal code generated by the compiler for local inner class:
In such case, compiler creates a class named LocalInner$1Local.class that have the reference of the outer class.
import java.io.PrintStream; class LocalInner$1Local { final LocalInner this$0; LocalInner$1Local() { super(); this$0 = LocalInner.this; } void msg() { System.out.println(LocalInner.access$000(LocalInner.this)); } }
Rule: Local variable can’t be private, public or protected.
Rules for Local Inner class
1) Local inner class cannot be invoked from outside the method.
2) Local inner class cannot access non-final local variable.
Program of accessing non-final local variable in local inner class
class LocalInner{ private String message = "dineshonjava.com";//instance variable void display(){ int data = 20;//local variable must be final class Local{ void msg(){ System.out.println(message+" : "+data);//compile time error } } Local loc = new Local(); loc.msg(); } public static void main(String args[]){ LocalInner obj = new LocalInner(); obj.display(); } }
Output: Compile Time Error
Program of accessing final local variable in local inner class:
class LocalInner{ private String message = "dineshonjava.com";//instance variable void display(){ final int data = 20;//local variable must be final class Local{ void msg(){ System.out.println(message+" : "+data); } } Local loc = new Local(); loc.msg(); } public static void main(String args[]){ LocalInner obj = new LocalInner(); obj.display(); } }
Output:
A local inner class is defined within a method, and the usual scope rules apply to it. It is only accessible within that method, therefore access restrictions (public, protected, package) do not apply. However, because objects (and their methods) created from this class may persist after the method returns, a local inner class may not refer to parameters or non-final local variables of the method.
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…