一般的な質問ですが、分かりやすいように例を挙げて質問します。
シナリオ:
- サポート ライブラリ 7 を使用し、アクション バー機能を使用しています。ユーザーが Android 2.2 (API 8) を搭載したデバイスにアプリをインストールしています。
- サポート ライブラリ 7 を使用し、アクション バー機能を使用しています。ユーザーが Android 4.3 (API 18) を搭載したデバイスにアプリをインストールしています。
実行時にシナリオ 1 がサポートされているライブラリのコードを実行することは明らかです。しかし、シナリオ 2 ではどうなるでしょうか。OSコードまたはサポートライブラリコードを実行しますか。
OSコードが実行されることを本当に願っています。
編集
Javaの仕組みは、ビルド時に決定された完全修飾名によってメソッドが解決されることです(@adelphusが書いたように)。したがって、サポート ライブラリ コードが実行されます。しかし、サポート ライブラリを実装するのが私だったら、次のようにしていました。
- 実行時に OS のバージョンを確認する
- OS に現在のオブジェクト/メソッドがある場合は、OS の実装を呼び出します (実際、この場合、サポート ライブラリは OS 機能のラッパーにすぎません)。
- これが古いOSの場合、自分で動作を実装する必要があります
それで、それはラッパーとして新しいバージョンで動作しますか、それとも内部実装を使用して両方のケースで動作しますか?
ありがとう