我对接口的理解是:
如果我声明一个实现接口的类(不是抽象的),那么如果我不提供所有方法的实现,那么它一定会产生编译时错误,对吗?
以下代码成功编译并运行。
import java.util.Iterator;
class DataStructure implements Iterator<Integer>{
public static void main(String[] args) {
// Fill the array with integer values and print out only
// values of even indices
DataStructure ds = new DataStructure();
}
}
但是,如果我调用未实现的接口方法,则会生成一个编译时错误。
import java.util.Iterator;
class DataStructure implements Iterator<Integer>{
public static void main(String[] args) {
// Fill the array with integer values and print out only
// values of even indices
DataStructure ds = new DataStructure();
ds.next();
}
}
错误日志是
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The type DataStructure<Integer> must implement the inherited abstract method Iterator<Integer>.next() r>.next()
at DataStructure.next(DataStructure.java:3)
at DataStructure.main(DataStructure.java:9)
这种行为是故意的,还是我缺少什么?
答案 0 :(得分:1)
我想出了问题,通过javac
命令编译时,都失败了。 (而不是将VS代码调试器用于Java扩展)
使用VS代码扩展,它报告了build failed
,但允许Proceed anyway
,这导致了这种奇怪的行为。