Java Inner Class Interview Questions
Explain Nested class.
What are the types of Nested classes are in Java?
Why do we use Nested Classes?
What is the difference between a Nested class and an Inner class in Java?
Explain Nested interface?
How can we access the non-final local variable, inside a Local Inner class?
Can an Interface be defined in a Class?
Do we have to explicitly mark a Nested Interface public static?
Why do we use Static Nested interface in Java?
ANSWERS / HINTS
1- A nested class is a class declared inside another class.
2- Java provides four types of Nested classes:
Member inner class
Static nested class
Anonymous inner class
Local inner class
3- There are following reasons for using nested classes:
Logical Grouping: We can logically group classes in one place. If one class is useful to only one other class, then we put smaller class within the larger class and keep them in one file. This kind of nesting “helper classes” in a top-level class makes the package more streamlined.
Code Clarity: Nested classed make the code more readable and well organized. Only Top-level classes are exposed. The helper classes are kept hidden and closer the code where it is used by a Top-level class.
Encapsulation: Nested classes increase encapsulation. Let say there are two top-level classes, Foo and Bar. Bar needs access to private members of Foo. We can hide class Bar within class Foo. In this way, private members of Foo can be accessed by class Bar. So class Foo remains encapsulated. Also, class Bar remains hidden from the outside world.
4- An Inner class is a non-static class. It is a type of Nested class that is defined in another class but not qualified with a Static modifier. A Nested class is also a class can be Static Nested class or a non-Static Inner class. An Inner class has access to other members of the enclosing class, even if they are declared private. A Static Nested class can not access the other members of the enclosing class.
5- A Nested interface is also known as Static interface. A Nested interface is declared inside another interface or a top-level class. By default it is static.
6- Java allows a Local Inner class to access only Constant local members. So we have to make the non-final local variable as final constant to access it inside a Local Inner class.
7- Yes, we can define a Static Nested interface within a class and only the enclosing class can access it.
8- A Nested Interface is implicitly public static. So the modifiers public and static are redundant in declaration.
9- Only the enclosing class can access a Static Nested interface.