可以实例化接口,还是Eclipse指向错误的.c​​lass文件?

时间:2015-07-20 08:20:34

标签: java eclipse

我相信我的问题的答案是一个巨大的NO,你不能做像

这样的事情
public interface Parser {
...
}

并在另一个班级

Parser parser = new Parser();

当然Parser parser部分完全正常,但new Parser()显然应该是错误的,不允许,给出编译器错误。 This answer这里有SO和许多我认为没有必要引用的文档。

我仍然在问这个问题,因为我引用了android.text.Html class的第122行,我的Eclipse IDE告诉我这个Parser,我的调用没有参数的构造函数属于接口org.xml.sax.Parser,如截图所示:

enter image description here

此外,引用的类型是相同的Parser类。

我在看什么? Eclipse是否指向错误的.c​​lass文件,这实际上是一个名为Parser的类?我怀疑它是,但如果是这样,Eclipse(不)知道哪个类的引用是一个类型和构造函数属于哪个类?这样的事情可能会使编译器链接错误的类,如果它产生的错误是(我认为)由模块知道在哪里,当我按住Control并左键单击方法时,知道该把我带到哪里?

2 个答案:

答案 0 :(得分:1)

  

Eclipse是否指向错误的.c​​lass文件?

没有

  

这实际上是一个叫做Parser的课程?

  

我怀疑它是,但如果是这样,那么Eclipse(不)知道哪个类的引用是一个类型而构造函数属于哪个类?

基于Java文件顶部的import语句。

基本上,您需要了解导入的确切方式。

Using Package Members

答案 1 :(得分:0)

您可以执行new MyInterface() {};

MyInterface myInterface= new MyInterface() {
                @Override
                public int myMethod() {
                    return 1;
                }
            }

它创建了一个匿名内部类。但是,如果没有在{}中指定的实施方式,那么您就无法做到。