Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么直接从接口调用接口方法(没有实现)有效?_Java_Methods_Interface_Libgdx - Fatal编程技术网

Java 为什么直接从接口调用接口方法(没有实现)有效?

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

这是来自LibGDX框架的,我正在调用该方法

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,您将知道使用的是什么类。