Core JAVA

Nested Interface in Java

A nested interface is just a regular interface defined inside another class or interface. They are actually defined inside the body of the parent class, not only in the same file. The feature is useful for grouping related interfaces and for encapsulating interfaces in the classes where they are used.

Nested interfaces facts:

  • when declared inside another interface they can only be public
  • when declared inside classes they can accept any access modifiers
  • they are implicitly static
  • they can be implemented by any class (package level, nested or inner) as long as the access modifiers permit visibility
  • as with regular package level interfaces variables defined inside are considered to be constants (static public) regardless of whether the modifiers are specified
  • like the package level interfaces they can declare nested classes and interfaces

While declaring nested interfaces in classes is useful and can help maintain a clean design, other constructs like classes nested in interfaces and interfaces nested in interfaces are of little benefit and seem outright weird and even dangerous.

Syntax of nested interface which is declared within the interface

interface interface_name{
 ...
 interface nested_interface_name{
  ...
 }
}

Syntax of nested interface which is declared within the class

class class_name{
 ...
 interface nested_interface_name{
  ...
 }
}

Example of nested interface which is declared within the interface

interface Designable{
   void design();
   interface Message{
       void dispaly();
  }
}

class NestedDemo implements Designable.Message{
   public void dispaly(){
     System.out.println("Hello nested interface at Dinesh on Java");
   }

  public static void main(String args[]){
     Designable.Message message = new NestedDemo();//upcasting here
     message.dispaly();
  }
}

output:

As you can see in the above example, we are accessing the Message interface by its outer interface Designable because it cannot be accessed directly. It is just like Almira inside the room, we cannot access the Almira directly because we must enter the room first. In collection framework, sun micro-system has provided a nested interface Entry. Entry is the sub interface of Map i.e. accessed by Map.Entry.

After compiling we get the following class files

  1. NestedDemo.class
  2. Designable$Message.class
  3. Designable.class

Internal code generated by the java compiler for nested interface Message
The java compiler internally creates public and static interface as displayed below:

public static interface Designable$Message
  {
    public abstract void dispaly();
  }

Example of nested interface which is declared within the class
Let’s see how can we define an interface inside the class and how can we access it.

class Design{
    interface Message{
       void dispaly();
  }
}

class NestedDemo implements Design.Message{
   public void dispaly(){
     System.out.println("Hello nested interface at Dinesh on Java");
   }

  public static void main(String args[]){
     Design.Message message = new NestedDemo();//upcasting here
     message.dispaly();
  }
}

output:

After compiling we get the following class files

  1. NestedDemo.class
  2. Design$Message.class
  3. Design.class

define a class inside the interface
If we define a class inside the interface, java compiler creates a static nested class. Let’s see how can we define a class within the interface:

interface INT{
  class Demo{}
}

<<Previous <<   || Index ||   >>Next >>

Previous
Next
Dinesh Rajput

Dinesh Rajput is the chief editor of a website Dineshonjava, a technical blog dedicated to the Spring and Java technologies. It has a series of articles related to Java technologies. Dinesh has been a Spring enthusiast since 2008 and is a Pivotal Certified Spring Professional, an author of a book Spring 5 Design Pattern, and a blogger. He has more than 10 years of experience with different aspects of Spring and Java design and development. His core expertise lies in the latest version of Spring Framework, Spring Boot, Spring Security, creating REST APIs, Microservice Architecture, Reactive Pattern, Spring AOP, Design Patterns, Struts, Hibernate, Web Services, Spring Batch, Cassandra, MongoDB, and Web Application Design and Architecture. He is currently working as a technology manager at a leading product and web development company. He worked as a developer and tech lead at the Bennett, Coleman & Co. Ltd and was the first developer in his previous company, Paytm. Dinesh is passionate about the latest Java technologies and loves to write technical blogs related to it. He is a very active member of the Java and Spring community on different forums. When it comes to the Spring Framework and Java, Dinesh tops the list!

Share
Published by
Dinesh Rajput

Recent Posts

Strategy Design Patterns using Lambda

Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…

2 years ago

Decorator Pattern using Lambda

Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…

2 years ago

Delegating pattern using lambda

Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…

2 years ago

Spring Vs Django- Know The Difference Between The Two

Technology has emerged a lot in the last decade, and now we have artificial intelligence;…

2 years ago

TOP 20 MongoDB INTERVIEW QUESTIONS 2022

Managing a database is becoming increasingly complex now due to the vast amount of data…

2 years ago

Scheduler @Scheduled Annotation Spring Boot

Overview In this article, we will explore Spring Scheduler how we could use it by…

2 years ago