Java 为什么直接从接口调用接口方法(没有实现)有效?
这是来自LibGDX框架的,我正在调用该方法Java 为什么直接从接口调用接口方法(没有实现)有效?,java,methods,interface,libgdx,Java,Methods,Interface,Libgdx,这是来自LibGDX框架的,我正在调用该方法 Gdx.input.isKeyPressed(Input.Keys.LEFT); 这是Gdx类的相关部分: public class Gdx { //.. public static Input input; //.. } 以及输入的相关部分: public interface Input { //.. public class Keys { //.. } //.. publi
Gdx.input.isKeyPressed(Input.Keys.LEFT);
这是Gdx类的相关部分:
public class Gdx {
//..
public static Input input;
//..
}
以及输入的相关部分:
public interface Input {
//..
public class Keys { //..
}
//..
public boolean isKeyPressed (int key);
//..
}
最糟糕的是它正在工作!!如果按左箭头,则返回true
我不明白为什么,看起来我调用的是一个没有实现的接口方法
我将留下两个类的源代码链接:
来自:
/**包含对{@link Application}、{@link Graphics}、{@link Audio}、{@link Files}和的引用的环境类
*{@link Input}实例。引用保存在公共静态字段中,该字段允许静态访问所有子系统。不要
*在非渲染线程的线程中使用图形。
*
*这通常是一种设计失礼,但在这种情况下比其他选择要好。
*@作者mzechner*/
公共类Gdx{
公共静态应用程序;
公共静态图形;
公共静态音频;
公共静态输入;
公共静态文件;
公共静态网;
公共静态GL20 gl;
公共静态GL20 GL20;
公共静态GL30 GL30;
}
因此,您可以看到文档中说该类包含对应用程序
、图形
、音频
和输入
的实例的引用。但它们是如何以及在哪里实施的
LibGDX知道它运行在哪种类型的设备上,并选择相应的实现,例如,在实现案例中,如果我们运行在Android设备上,我们将使用实现:所有这些都是在幕后自动完成的,因此我们更专注于制作一款出色的游戏/应用程序。
因此,当我们使用:
Gdx.input.isKeyPressed(input.Keys.LEFT);
我们正在为我们的设备使用正确的
输入实现
,而不是从接口本身调用该方法。它通过具体代码(可能是本机代码)在库的其他地方实现,并分配给静态字段。每个后端都有一个类实现该接口。例如,有和。如果您使用调试器并检查什么类型是Gdx.input
value,您将知道使用的是什么类。