title: Java - Interface, instantiating an interface?
body: <p>So I just found this code example online a while ago and I'm going over it again but quite confused. </p>
  
  <p>From looking at it, what I gather (and it might be wrong) is that it passes to the print method in the NumberPrinter class a Printer object. However, the interface is also called Printer, so aren't we instantiating an anonymous class of the Printer interface, defining the methods and then passing it?</p>
  
  <p>My basic question is, is my initial assumption correct? And if so I thought you could not instantiate an interface?</p>
  
  <pre><code>public class NumberPrinter {
  
      public interface Printer {
          public void print (int idx);
      }
  
      public static void print (Printer p) {
          for (int i = 0; i &lt; 4; i++) {
              p.print(i);
          }
      }
  
      public static void main(String[] args) {
          print(new Printer() {
  
              @Override
              public void print(int idx) {
                  System.out.println(idx);
              }
  
          });
      }
  
  }
  </code></pre>