LibGDX class 似乎没有调用 superclass 构造函数,这怎么可能?
LibGDX class does not appear to call a superclass constructor, how is this possible?
我想扩展内置的 libgdx class GLFrameBuffer 但不明白我应该为构造函数编写什么。
GLFrameBuffer 已经有另一个子class,FrameBuffer,它使用以下构造函数,最后一个是混淆的主题。
FrameBuffer () {}
protected FrameBuffer (GLFrameBufferBuilder<? extends GLFrameBuffer<Texture>> bufferBuilder) {
super(bufferBuilder);
}
public FrameBuffer (Pixmap.Format format, int width, int height, boolean hasDepth) {
this(format, width, height, hasDepth, false);
}
public FrameBuffer (Pixmap.Format format, int width, int height, boolean hasDepth, boolean hasStencil) {
FrameBufferBuilder frameBufferBuilder = new FrameBufferBuilder(width, height);
frameBufferBuilder.addBasicColorTextureAttachment(format);
if (hasDepth) frameBufferBuilder.addBasicDepthRenderBuffer();
if (hasStencil) frameBufferBuilder.addBasicStencilRenderBuffer();
this.bufferBuilder = frameBufferBuilder;
build();
}
注意没有调用 superclass 构造函数,它的 superclass 没有(可见的)无参构造函数。为什么这是允许的?两个 classes 都有没有代码的私有无参数构造函数。如果我完全复制 FrameBuffer class 并重命名它,我会收到一条消息说我必须显式调用另一个构造函数。
编辑:libgdx 版本 1.9.8
你所说的私有构造函数实际上并不是私有的。
它们是默认构造函数,它们的可见级别是 default
而不是 private
。这是在您未指定访问修饰符时应用的访问修饰符(因此名称为 default)
在 java 中,任何具有默认访问修饰符的内容都可以被同一包中的其他 类 访问。
而这些类都在同一个包里,com.badlogic.gdx.graphics.glutils
。
FrameBuffer ()
构造函数实际上调用它是无参数super
构造函数。
我想扩展内置的 libgdx class GLFrameBuffer 但不明白我应该为构造函数编写什么。
GLFrameBuffer 已经有另一个子class,FrameBuffer,它使用以下构造函数,最后一个是混淆的主题。
FrameBuffer () {}
protected FrameBuffer (GLFrameBufferBuilder<? extends GLFrameBuffer<Texture>> bufferBuilder) {
super(bufferBuilder);
}
public FrameBuffer (Pixmap.Format format, int width, int height, boolean hasDepth) {
this(format, width, height, hasDepth, false);
}
public FrameBuffer (Pixmap.Format format, int width, int height, boolean hasDepth, boolean hasStencil) {
FrameBufferBuilder frameBufferBuilder = new FrameBufferBuilder(width, height);
frameBufferBuilder.addBasicColorTextureAttachment(format);
if (hasDepth) frameBufferBuilder.addBasicDepthRenderBuffer();
if (hasStencil) frameBufferBuilder.addBasicStencilRenderBuffer();
this.bufferBuilder = frameBufferBuilder;
build();
}
注意没有调用 superclass 构造函数,它的 superclass 没有(可见的)无参构造函数。为什么这是允许的?两个 classes 都有没有代码的私有无参数构造函数。如果我完全复制 FrameBuffer class 并重命名它,我会收到一条消息说我必须显式调用另一个构造函数。
编辑:libgdx 版本 1.9.8
你所说的私有构造函数实际上并不是私有的。
它们是默认构造函数,它们的可见级别是 default
而不是 private
。这是在您未指定访问修饰符时应用的访问修饰符(因此名称为 default)
在 java 中,任何具有默认访问修饰符的内容都可以被同一包中的其他 类 访问。
而这些类都在同一个包里,com.badlogic.gdx.graphics.glutils
。
FrameBuffer ()
构造函数实际上调用它是无参数super
构造函数。