如果我扩展它,为什么我的类不是BitmapFont

时间:2015-08-27 08:04:24

标签: java libgdx

所以我有这个课程:

public class Font extends BitmapFont
{
    FreeTypeFontGenerator generator;
    FreeTypeFontGenerator.FreeTypeFontParameter parameter;
    public Font()
    {
        generator = new FreeTypeFontGenerator();
        parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
        parameter.size = 30;
        parameter.color = Color.WHITE;
        this = generator.generateFont(parameter);
        generator.dispose();
    }
}

但是就这一行:

this = generator.generateFont(parameter);

我收到错误,它说: required Font, found BitmapFont.

现在我不明白为什么编译器没有把我的Font类看作BitmapFont。你们知道原因,还知道我怎样才能将字体分配给班级本身?

1 个答案:

答案 0 :(得分:3)

无论Raeffaele在评论中描述的错误如何,你都不了解OO的基本内容。

采用这个简单的 is-a 示例:牛是动物。但是动物并不总是牛。它也可以是绵羊或狗。众所周知,狗和牛完全不同,即使它们都继承自动物。

现在我们将此应用于您的情况。字体是一个BitmapFont,但BitmapFont并不总是一个字体。

鉴于此,

generator.generateFont(parameter);

调用返回一个LibGDX BitmapFont实例,而不是您自己的Font类的实例。因此,尝试将其分配给需要Font实例的变量将是一个非常糟糕的主意。

缩短版本。

你应该明白这是有效的,因为Font是一个BitmapFont:

BitmapFont font = new Font();

这不是因为BitmapFont不是Font:

Font font = new BitmapFont();

您的代码正试图以稍微不同的方式创建第二种情况。