Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java抽象类和类型_Java_Abstract Class_Bytebuffer - Fatal编程技术网

Java抽象类和类型

Java抽象类和类型,java,abstract-class,bytebuffer,Java,Abstract Class,Bytebuffer,我在: ByteBuffer out=ByteBuffer.wrap(数据) 如果ByteBuffer是一个抽象类,并且抽象类不能被初始化,那么如何声明对象out ByteBuffer.wrap()返回一个ByteBuffer,但是作为ByteBuffer一个抽象类,wrap方法返回的ByteBuffer的实现类是什么 因为wrap()方法返回一个特定的ByteBuffer实现,在本例中是HeapByteBuffer 请参见jdk1.6.0_43_src.zip中的wrap实现 public s

我在:
ByteBuffer out=ByteBuffer.wrap(数据)

如果
ByteBuffer
是一个抽象类,并且抽象类不能被初始化,那么如何声明对象
out

ByteBuffer.wrap()
返回一个
ByteBuffer
,但是作为
ByteBuffer
一个抽象类,wrap方法返回的
ByteBuffer
的实现类是什么

因为
wrap()
方法返回一个特定的
ByteBuffer
实现,在本例中是
HeapByteBuffer

请参见
jdk1.6.0_43_src.zip中的
wrap
实现

public static ByteBuffer wrap(byte[] array, int offset, int length)
{
    try {
        return new HeapByteBuffer(array, offset, length);
    } catch (IllegalArgumentException x) {
        throw new IndexOutOfBoundsException();
    }
}

这不是构造函数调用,而是静态方法的调用。 抽象类可以有非抽象方法

构造函数调用如下所示:

ByteBuffer out = new ByteBuffer(data);

抽象类不能被实例化,但是它们的子类(如果不是抽象的话)可以被实例化

在这个特定的示例中,根据ByteBuffer source,调用ByteBuffer.wrap()(请注意,调用的是静态方法,而不是构造函数)会得到一个HeapByteBuffer实例,它是ByteBuffer的子类


我假设您正在尝试理解的概念:您想要一个ByteBuffer,您就可以得到一个。您真的不需要关心特定的实现您得到的任何实现都将提供ByteBuffer合同中声明的功能。

,因为您没有实例化ByteBuffer。您调用了一个静态方法,该方法返回ByteBuffer的某个子类的实例。