JAVA:嵌套在公共类的迭代器中

JAVA:嵌套在公共类的迭代器中,java,iterator,nested,Java,Iterator,Nested,所以对于一个学校项目,我需要创建一个私有方法来实现迭代器接口。我有我的方法SetIterator,它看起来像这样: private class SetIterator implements Iterator<T> { private T[] items; private int count; private int current; private SetIterator(T[] elements, int size) { items = ele

所以对于一个学校项目,我需要创建一个私有方法来实现迭代器接口。我有我的方法SetIterator,它看起来像这样:

  private class SetIterator implements Iterator<T> {
  private T[] items; 
  private int count; 
  private int current; 

  private SetIterator(T[] elements, int size) {
     items = elements;
     count = size;
     current = 0;
  }

  private boolean hasNext() {
     return (current < count);
  }

  private T next() {
     if (!hasNext()) {
        throw new NoSuchElementException();
     }

     return items[current++];
  }
私有类SetIterator实现迭代器{
私人物品;
私人整数计数;
私有电流;
私有SetIterator(T[]元素,int size){
项目=要素;
计数=大小;
电流=0;
}
私有布尔hasNext(){
返回(当前<计数);
}
二等兵{
如果(!hasNext()){
抛出新的NoTouchElementException();
}
返回项目[当前+++];
}
但是,我无法编译,因为我收到以下错误消息:

ArraySet.java:311: error: next() in ArraySet.SetIterator cannot implement next() in Iterator
  private T next() {
            ^
attempting to assign weaker access privileges; was public
where T,E are type-variables:
T extends Comparable<? super T> declared in class ArraySet
E extends Object declared in interface Iterator
ArraySet.java:307: error: hasNext() in ArraySet.SetIterator cannot implement hasNext() in Iterator
private boolean hasNext() {
                  ^
attempting to assign weaker access privileges; was public
ArraySet.java:311:error:ArraySet.SetIterator中的next()无法在迭代器中实现next()
二等兵{
^
正在尝试分配较弱的访问权限;是公共的
其中T,E是类型变量:

迭代器是一个接口。因此,它的方法是公共的。你不能实现这个方法并使它私有

将可见性更改为
public

public boolean hasNext() {
  return (current < count);
}
public boolean hasNext(){
返回(当前<计数);
}

迭代器是一个接口。因此,它的方法是公共的。您不能实现该方法并将其设为私有

将可见性更改为
public

public boolean hasNext() {
  return (current < count);
}
public boolean hasNext(){
返回(当前<计数);
}

错误是不言自明的:
next
hasNext
Iterator
中是公共的,因此不能将它们设为私有的。将
private
更改为
public
,错误应该会消失。

错误是不言自明的:
next
hasNext
中是公共的erator
因此不能将它们设置为私有。将
私有
更改为
公共
,错误应该会消失。

出现此错误的原因是无法将“较弱”权限分配给从超类重写或从接口实现的方法

由于在Java接口上定义的方法默认情况下是
public
,因此Java编译器阻止我们使用较弱的访问权限来实现这些方法,例如
protected
private
。这样做的原因是因为面向对象编程的固有原理—子类的实例通常,在需要其超类的实例时,s应该是可用的(通过签出可以更好地理解这个概念)


总之,将
SetIterator
hasNext()
next()
方法声明为public,因为它们实现了
Iterator
接口的方法。

出现此错误的原因是您无法分配“较弱的”从超类重写或从接口实现的方法的权限

由于在Java接口上定义的方法默认情况下是
public
,因此Java编译器阻止我们使用较弱的访问权限来实现这些方法,例如
protected
private
。这样做的原因是因为面向对象编程的固有原理—子类的实例通常,在需要其超类的实例时,s应该是可用的(通过签出可以更好地理解这个概念)


总之,将
SetIterator
hasNext()
next()
方法声明为public,因为它们实现了
Iterator
接口的方法。

如果您知道在Java中过度使用的规则,就不会遇到这个问题

尝试在google上搜索Java中的重写规则。从这里开始:


永远记住这条经验法则:永远不要缩小方法的范围,在重写方法时可以增加方法的范围,但永远不能取消它。

如果您知道重写inr Java的规则,就不会遇到这个问题

尝试在google上搜索Java中的重写规则。从这里开始:


永远记住这条经验法则:永远不要缩小方法的范围,你可以在重写它的同时增加方法的范围,但永远不能取消它。

使
next()
public
public T next(){
。使
next()
public
public T next(){
。我想我只是认为在私有类中使用公共方法会违反封装。谢谢:我想我只是认为在私有类中使用公共方法会违反封装。谢谢:D