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。选择正确的实现取决于工厂方法。

07-26 02:47