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 >>

No comments:

Post a Comment