2

抽象クラスはインスタンス化できないことを知っています。しかし、以下のコードには疑問があります。このコードは、android bitmap fun デモ ( http://commondatastorage.googleapis.com/androiddevelopers/shareables/training/BitmapFun.zip ) の一部です。

// ImageWorkerAdapter class is nested in another abstract class ImageWorker
public static abstract class ImageWorkerAdapter
{
public abstract Object getItem(int num);
public abstract int getSize();
}

//this snippet is seen in Images.java
public final static ImageWorkerAdapter imageWorkerUrlsAdapter = new ImageWorkerAdapter() { 
@Override
public Object getItem(int num) {
return Images.imageUrls[num];
}

抽象クラスのインスタンスを作成する方法がわかりません。このコードを理解するのを手伝ってください。

4

3 に答える 3

6

ImageWorkerAdapterこのコードは、抽象クラスを拡張する無名クラスの初期化を表しています。

new ImageWorkerAdapter() { 
    @Override
    public Object getItem(int num) {
    return Images.imageUrls[num];
}

実際、無名の実装は中括弧の間で定義されています。

匿名クラスであるため、抽象クラスまたはインターフェイスに依存することは完全に有効です。

于 2012-12-09T13:44:52.507 に答える
4

あなたが示すコードは、インスタンス化されている抽象クラスを示していません。

インスタンス化されている匿名クラスを示しています。この場合、匿名クラスは抽象クラスを拡張します。Runnable非常に一般的な例として、匿名クラスでインターフェイスを実装することもできます。

于 2012-12-09T13:45:43.990 に答える
1

コードは抽象クラスをインスタンス化しませんが、他の抽象クラスを拡張および実装 (オーバーライド) する新しい匿名抽象クラスを定義します。

于 2012-12-09T13:46:28.943 に答える