LibGDX类似乎没有调用超类构造函数,这怎么可能?

时间:2018-03-08 18:25:37

标签: java libgdx

我想扩展内置的libgdx类GLFrameBuffer,但是不明白我应该为构造函数编写什么。

GLFrameBuffer已经有了另一个子类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();
}

注意,没有对超类构造函数的调用,并且它的超类没有(可见)无参数构造函数。为什么允许这样做?这两个类都有没有代码的私有无参数构造函数。如果我完全复制FrameBuffer类并重命名它,我会得到一条消息,说我必须明确调用另一个构造函数。

编辑:libgdx版本1.9.8

1 个答案:

答案 0 :(得分:3)

你所谓的私有构造函数实际上并不是私有的。

它们是默认构造函数,其可见性级别为default而不是private。这是您未指定访问修饰符时应用的访问修饰符(因此名称为默认值)

在java中,任何具有默认访问修饰符的东西都可以被同一个包中的其他类访问。​​

这些类都在同一个包中,com.badlogic.gdx.graphics.glutils

FrameBuffer ()构造函数实际上称它为无参数super构造函数。