 <p>By passing the interface you are creating the opportunity to pass all the classes which implements the interface. But in case1 you can only pass the <code>MyClass</code> and its subclasses.</p> <p>For example think about the following case</p> <pre><code>public class YourClass implements MyInterface { public void foo() { doJob(); } } </code></pre> <p>Now in case2 you can pass both the instance of MyClass and YourClass. but in case1 you can't.</p> <blockquote> <p>Now, what is the importance of it?</p> </blockquote> <p>In OOP it is recommended to program to the interface instead of class. So if you think about good design there will be no case1. Only case2 will do the job for you.</p>