83545
Android Developersを参照すると `registerActivityLifecycleCallbacks` の引数は  
`Application.ActivityLifecycleCallbacks` となっているのですが  
実装例を見てみると `Application` クラスのインスタンスを渡しているようです。  
これはキャスト？のようなことが行われているのでしょうか？  
初歩的な質問で申し訳ありません。

Android Developersの記述  
`registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks
callback)`

[Android
Developersのページ](https://developer.android.com/reference/android/app/Application?hl=ja)

実装の例

```

    public class MainApplication extends Application
        implements Application.ActivityLifecycleCallbacks {
    
        @Override
        public void onCreate() {
            super.onCreate();
        
            registerActivityLifecycleCallbacks(this);
        }
    }
    
```
CC BY-SA 4.0
2021-11-10T09:32:49.350
83542
2021-11-10T11:35:13.050
2021-11-10T11:18:54.313
7290
49031
question
java android
registerActivityLifecycleCallbacks の引数について
```

    class MainApplication implements Application.ActivityLifecycleCallbacks
    
```

ということで、その `MainApplication` は、`Application.ActivityLifecycleCallbacks`
というインターフェースを継承しています。つまり、立派な `Application.ActivityLifecycleCallbacks` の一種です。

[`registerActivityLifecycleCallbacks`](https://developer.android.com/reference/android/app/Application?hl=ja#registerActivityLifecycleCallbacks\(android.app.Application.ActivityLifecycleCallbacks\))
は、`Application.ActivityLifecycleCallbacks` を引数に取るので、この `MainApplication`
自体（`this`）を渡すことが `Application.ActivityLifecycleCallbacks` を渡すことに他ならないことになります。

インターフェースなので、あくまでも、[`Application.ActivityLifecycleCallbacks`
として定義された各種のメソッド](https://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks?hl=ja)を持つものとして扱われ、`Application`
のサブクラス（`extended`）としての機能の部分は無視されます。ですから、`Application`
としてのインスタンスを渡していることにはならないと思います。

つまりキャストのように、ある型から他の型へと **クラスを変換する** ようなこととは少し違うかなと。
CC BY-SA 4.0
2021-11-10T11:17:15.553
83545
2021-11-10T11:35:13.050
2021-11-10T11:35:13.050
7290
7290
83542
answer