Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Interface - Fatal编程技术网

Java 理解接口引用变量有困难

Java 理解接口引用变量有困难,java,variables,interface,Java,Variables,Interface,作为一个来自C语言的人,我正在努力理解这段代码背后的逻辑 因此,在Impler类中,我声明了一个Clicker类型的变量,它是一个接口。当实例化Impler类时,我将传递Main实例并将其分配给该变量(我不知道这一点及其工作原理),然后使用Main中编写的抽象方法 实现Impler.Clicker的主类: public static void main(String[] args) { new Main(); } Main() { new Impler(this); } @O

作为一个来自C语言的人,我正在努力理解这段代码背后的逻辑

因此,在
Impler
类中,我声明了一个
Clicker
类型的变量,它是一个接口。当实例化
Impler
类时,我将传递
Main
实例并将其分配给该变量(我不知道这一点及其工作原理),然后使用
Main
中编写的抽象方法

实现
Impler.Clicker
的主类:

public static void main(String[] args) {
    new Main();
}

Main() {
    new Impler(this);
}

@Override
public void toClick(int i) {
    System.out.print("clicked on " + i);
}
Impler类:

private Clicker mClicker;

Impler(Clicker clicker) {
    this.mClicker = clicker;

    mClicker.toClick(3);
}

public interface Clicker {
    public void toClick(int i);
}

您遗漏了
Main
类必须实现
Clicker
才能编译此代码。除此之外(事实上,这是一个奇怪的设计),你不清楚什么是你不理解的。你在努力理解什么?你准确地描述了正在发生的事情,就是这样。每个
Main
都是一个
Clicker
,因此只要需要
Clicker
的实例,就可以使用
Main
的实例。您提供的是Clicker类型的实例,但还没有实例化Clicker。您正在传递此引用,即您的main所在的Clicker实现实例的引用。您是否不了解多态性?