@Module

@Injectするオブジェクトのインスタンス生成については、@Moduleを付けたModuleという部分で定義することで切り離す。

とてもつもなくわかりやすいdagger2(2.11)入門 - Qiita
Y.A.M の 雑記帳: Android で Dagger を使う(その1)

Pump1やPump2をPumpBaseにする。
PumpBaseは、

interfaceになっていて、

これをPump1が継承している。
で、PumpBaseModuleは、

providePumpBaseというメソッドを定義し、Pump1からPumpBaseへの変換役となっている。
そして、

DaggerMainActivity_CoffeeShop.create()を、DaggerMainActivity_CoffeeShop.builder().pumpBaseModule(new PumpBaseModule()).build()に差し替える。
@Componentのほうも、PumpBaseModule.classを使うように指定する。

これで、

PumpBaseModuleが内部で指定しているPump1を生成して使うようになる。
PumpBaseModuleが内部で指定しているPump1を生成して使うようになる。

PumpBaseModuleが内部で指定しているPump1を生成して使うようになる。

Sample/dagger/annotationModule/annotationModule/AM/AM_ at master · bg1bgst333/Sample · GitHub