Java 摘要 Class 和类型
Java Abstract Class and types
我在Java Tutorials中读到这行代码:
ByteBuffer out = ByteBuffer.wrap(data);
如果 ByteBuffer
是一个抽象 class 并且抽象 class 不能被实例化,那么如何声明对象 out
?
ByteBuffer.wrap()
return一个ByteBuffer
,但作为ByteBuffer
一个抽象class,[=14的实现class是什么=] 方法 wrap return?
因为 wrap()
方法 returns 一个特定的 ByteBuffer
实现,在这种情况下 HeapByteBuffer
.
参见 wrap
jdk1.6.0_43_src.zip
的实现
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 源代码,调用 ByteBuffer.wrap()(请注意,调用的是静态方法,而不是构造函数)会为您提供 HeapByteBuffer 的实例,它是 ByteBuffer 的子类。
我假设你正在尝试掌握 subtype polymorphism 的概念:你想要一个 ByteBuffer,你有一个。 你真的不需要关心具体的实现。 假定您获得的任何实现都将提供 ByteBuffer 合同中声明的功能。
我在Java Tutorials中读到这行代码:
ByteBuffer out = ByteBuffer.wrap(data);
如果 ByteBuffer
是一个抽象 class 并且抽象 class 不能被实例化,那么如何声明对象 out
?
ByteBuffer.wrap()
return一个ByteBuffer
,但作为ByteBuffer
一个抽象class,[=14的实现class是什么=] 方法 wrap return?
因为 wrap()
方法 returns 一个特定的 ByteBuffer
实现,在这种情况下 HeapByteBuffer
.
参见 wrap
jdk1.6.0_43_src.zip
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 源代码,调用 ByteBuffer.wrap()(请注意,调用的是静态方法,而不是构造函数)会为您提供 HeapByteBuffer 的实例,它是 ByteBuffer 的子类。
我假设你正在尝试掌握 subtype polymorphism 的概念:你想要一个 ByteBuffer,你有一个。 你真的不需要关心具体的实现。 假定您获得的任何实现都将提供 ByteBuffer 合同中声明的功能。