abstract class IntBuffer
似乎您无论如何都无法创建此类的实例,因为它声明了abstract,但同时有一个静态工厂方法
IntBuffer allocate(int capacity)
,现在您可以通过简单地Buffer b=IntBuffer.allocate(128)
创建实例但是,等等,IntBuffer是抽象的,它没有任何预定义的具体子类。那么这是如何工作的呢?
编辑-------------
我已经怀疑它返回了IntBuffer的子类,但是我找不到HeapIntBuffer或任何此类子类。我想这是私下宣布的吗?因此它不存在于api doc中!
最佳答案
仅仅因为有一个静态方法,并不意味着它只是创建一个IntBuffer
实例。这是工厂方法可以执行的操作的简短示例:
abstract class Abstract {
static Abstract createInstance(int size) {
return size < 10 ? new SmallImplementation() : new LargeImplementation();
}
public abstract String getDescription();
}
class SmallImplementation extends Abstract {
@Override public String getDescription() {
return "I'm an implementation for small sizes";
}
}
class LargeImplementation extends Abstract {
@Override public String getDescription() {
return "I'm an implementation for large sizes";
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
Abstract small = Abstract.createInstance(1);
Abstract large = Abstract.createInstance(100);
System.out.println(small.getDescription());
System.out.println(large.getDescription());
}
}
这基本上是多态性的核心-
Test.main
中的代码仅了解Abstract
。选择正确的实现取决于工厂方法。