java用其他方法实现接口

时间:2011-06-15 01:05:28

标签: java interface implementation

我有一个实现MyDoublyIterator<E>接口的类Iterator<E>。此外,它还有一些其他方法不属于接口(例如public void boolean hasPrev())。当我尝试在我的主类中调用该方法时,我的IDE无法解析该方法。 这是我用来称呼它的代码

Iterator<String> di = new MyDoublyIterator<String>();
di.hasPrev();

所以我猜我的问题为什么不能找到那种方法。我是否必须构建一个实现接口并扩展它的抽象类?

5 个答案:

答案 0 :(得分:2)

问题是di-variable属于Iterator类型。所以它可以包含这个接口的任何实现。因此IDE无法确定它是否包含MyDoublyIterator的实例。因此,为了使其按照您的要求工作,您必须将变量的类型更改为MyDoublyIterator。

答案 1 :(得分:1)

最好首先使用您自己的接口扩展原始接口Iterator<E>,例如:DoubleIterator<E>使用其他方法(如hasPrev()),然后在其中实现新创建的接口DoubleIterator<E>你的班级MyDoublyIterator<E>

否则你可以像这样实例化你的类:

MyDoublyIterator<String> di = new MyDoublyIterator<String>();
di.hasPrev();

然后编译器不会抱怨,因为您正在创建MyDoublyIterator<E>类型。

答案 2 :(得分:1)

当编译器看到di.hasPrev();它只知道diIterator<String>并且不知道它是你自己的类型。所以它不知道你的自定义方法。

答案 3 :(得分:0)

Iterator<String> di = new MyDoublyIterator<String>(); 
di.hasPrev(); 

它对你没有帮助。编译器需要一种方法来知道您自己的接口具有该方法,而不是内置的接口Iterator接口,即Iterator<String>。在这里,您要为内置Iterator接口创建引用,即Iterator<String>

因此,如果您有自己的名为MyDoublyIterator<E>的接口,并且此接口具有名为hasPrev();的方法,则需要执行此操作:

 MyDoublyInterface<String> di = new MyDoublyIterator<String>(); 
 di.hasPrev();  

然后它将解析方法调用,因为它知道您已经创建了自己的MyDoubleInterface<T> 的引用,它现在应该解决问题。 : - )

答案 4 :(得分:0)

其他答案是正确的,但这是另一个旋转 - 创建一个extends迭代器:

的界面
interface DoublyIterator<E> extends Iterator<E> {
    boolean hasPrev();
}

class MyDoublyIterator<E> implements DoublyIterator<E> {
    // ... implement methods
}

DoublyIterator<String> di = new MyDoublyIterator<String>();
di.hasPrev();