2

我知道抽象类不能被实例化。但我对下面的代码有疑问。此代码是 android 位图趣味演示 ( 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 回答