Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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/lua/3.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_Eclipse_Oop_Interface_Inner Classes - Fatal编程技术网

Java:有无创建对象的接口实例化

Java:有无创建对象的接口实例化,java,eclipse,oop,interface,inner-classes,Java,Eclipse,Oop,Interface,Inner Classes,我对下面的代码有点困惑。在第一个代码中,接口被实例化,对象I被创建: Inter i=new Inter() { @Override public void work() { //CODE:1 System.out.println("work work work work work work"); }

我对下面的代码有点困惑。在第一个代码中,接口被实例化,对象I被创建:

Inter i=new Inter() {

            @Override
            public void work() {                                      //CODE:1
                System.out.println("work work work work work work");

            }
        }.work() ; //this won't worrk gives error:can't covert void to Inter
但是,如果我实例化而不创建对象,那么一切都很好:

 new Inter() {   //no object created 

            @Override
            public void work() {                                    //CODE:2
                System.out.println("CODE2: work work work work");

            }
        }.work();                 //this is printing in the console

有人能告诉我原因是什么吗?如果我创建了对象,为什么代码不起作用?

上面的实现不起作用,因为如果您查看关闭错误。 错误为
类型不匹配:无法从void转换为Inter
您正在最后调用方法
work()
,因此它被视为方法调用,而您的
work()
具有返回类型
void
,因此它引发异常。删除
work()
的链调用,它将对您有效

Inter i=new Inter() {

            @Override
            public void work() {                                      //CODE:1
                System.out.println("work work work work work work");

            }
        }.work() ; //this won't worrk gives error:can't covert void to Inter
如果您将上面的代码更改为下面的代码,那么它将工作

Inter i=new Inter() {

                @Override
                public void work() {                                      //CODE:1
                    System.out.println("work work work work work work");

                }
            };
i.work();

不能将变量分配给
void
方法调用。“你在搞什么?”坎瓦尔检查我的答案