title: What is the use case for @Binds vs @Provides annotation in Dagger2
body: <p>I am not certain on the purpose for Dagger2's <a href="https://google.github.io/dagger/api/2.13/dagger/Binds.html" rel="noreferrer">@Bind annotation.</a>  </p>
  
  <p>From what i have read online im still not clear but here is an example:</p>
  
  <pre><code>@Module
  public abstract class HomeModule {
  
    @Binds
    public abstract HomePresenter bindHomePresenter(HomePresenterImp   
      homePresenterImp);
  }
  </code></pre>
  
  <p>and the class definitions look like this:</p>
  
  <pre><code>public interface HomePresenter {
      Observable&lt;List&lt;User&gt;&gt; loadUsers();
  }
  
  public class HomePresenterImp implements HomePresenter {
  
      public HomePresenterImp(){
      }  
  
      @Override
      public Observable&lt;List&lt;User&gt;&gt; loadUsers(){
          //Return user list observable
      }
  }
  </code></pre>
  
  <p>why would i need to use @Binds if i can just use provides annotation as follows:</p>
  
  <pre><code>@Provides
  public HomePresenter provideHomePresenter() {
      return new HomePresenterImp();
  }
  </code></pre>
  
  <p>what is the usecase for @Binds instead of @Provides ? if i use @Binds do i still need to declare it in my appcomponent (its an abstract class when i use @Binds)?</p>