我知道抽象类无法实例化。但我对下面的代码有疑问。此代码是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];
}
我无法理解如何创建抽象类的实例。请帮我理解这段代码。
答案 0 :(得分:6)
此代码表示扩展ImageWorkerAdapter
抽象类的匿名类的初始化:
new ImageWorkerAdapter() {
@Override
public Object getItem(int num) {
return Images.imageUrls[num];
}
实际上,匿名实现是在花括号之间定义的。
作为一个匿名类,依赖抽象类或接口是完全有效的。
答案 1 :(得分:4)
您显示的代码未显示正在实例化的抽象类。
它显示正在实例化的anonymous class。在这种情况下,匿名类扩展了一个抽象类。您还可以在匿名类中实现接口,Runnable
是一个非常常见的示例。
答案 2 :(得分:1)
您的代码不会实例化抽象类,而是定义新的匿名抽象类,其中包括扩展和实现(覆盖)其他抽象类。