未实现的接口方法没有错误

时间:2020-07-04 18:42:03

标签: java interface

我对接口的理解是:

如果我声明一个实现接口的类(不是抽象的),那么如果我不提供所有方法的实现,那么它一定会产生编译时错误,对吗?

以下代码成功编译并运行。

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)

这种行为是故意的,还是我缺少什么?

1 个答案:

答案 0 :(得分:1)

我想出了问题,通过javac命令编译时,都失败了。 (而不是将VS代码调试器用于Java扩展)

使用VS代码扩展,它报告了build failed,但允许Proceed anyway,这导致了这种奇怪的行为。