最近、Javaプログラミング言語の学習を開始しました。スマートデバイスをシミュレートするアプリケーションでポリモーフィズムに関する知識をテストしたかったのです。インターフェイスをスーパークラスとして使用する場合にポリモーフィズムを適用する適切なソリューション
私はOsという名前のインターフェイスを作成しました。このインターフェイスの主な仕事は、継承者が自分で実装すべきものを指示することです。
public interface Os {
public ArrayList<App> getApps();
public void installApps(Collection<App> apps);
}
私はアンドロイド用に1つとiOS用に2つのクラスを作成しました。 私はまた、Appという名前のインターフェースと、それを継承するAndroidAppとIosAppの2つのクラスを作成しました。
私は可能な限りポリモーフィズムを使用したいが、どこに行くのかはわからない。私はAndroidのosにこのようなタイプのAndroidAppしか受け付けないプライベートコレクションを持ってほしかった ArrayList<AndroidApp>
しかし、私はインターフェイスのgetAppsメソッドを実装したいと考えていたので、そのメソッドの戻り値の型をインターフェイスに入れることはできません階層の上に何かが必要なので、代わりにアンドロイドの私的なリストをArrayList<App>
に変更しました。
私には、私が持っているオセツにアプリケーションをインストールする方法があります。
public class Android implements Os {
private ArrayList<App> androidApps;
public void installApps(Collection<App> apps) {
//I want to only install Android apps(adding them to my private collection
for (App app : apps) {
if(app instanceof AndroidApp){
System.out.println("installing android app ... " +app.getAppName()+" installed!");
androidApps.add(app);
}
else
System.out.println(app.getAppName()+" is not an android app!");
}
}
}
私が前に述べたように、getAppsは私が選択した任意のOSにインストール済みのアプリケーションを返すことを担当しています。
これは概念的な質問です。私は、AndroidとIosのためのより特定のコレクションを使用すべきかどうかを判断するのに問題があります。この
public class AndroidOs{
private Collection<AndroidApp> androidApps;
}
代わりの
public class AndroidOs{
private Collection<App> androidApps;
}
を使用して同様 が、私はので、私、私のインターフェイスは、両方のオペレーションシステムのための一般的なインタフェースであることの、その目的を失うために起こっている最初のプライベートコレクションを使用していたならば実装しようとするアンドロイド私はArrayList<AndroidApp>
をArrayList<App>
にキャストできません。
申し訳ありませんが、私の質問が多少曖昧でしたが、私はできるだけ具体的にしようとしました。
ダウン投票あなたがポリモーフィズムを学ぶためにしようとしている示されているが、私の答えの下で、あなたはすでに多型を知っているとコメントしているため。 – webmaster