Java:有无创建对象的接口实例化
我对下面的代码有点困惑。在第一个代码中,接口被实例化,对象I被创建: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"); }
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
方法调用。“你在搞什么?”坎瓦尔检查我的答案