Java中未定义的方法

时间:2013-09-12 01:31:18

标签: java methods undefined

我正在开发一个包含多个类的Java项目。一个类有main方法,一个类是最大堆数据结构,第三个类是要存储在最大堆中的对象的包装类。

在包装器类中,我定义了以下方法:

public void setHeapLoc(int l)
    {
        heapLoc = l;
    }

在max heap类中,我有以下代码:

public int insert(CompEq comp) {
  assert s < size : "No room";
  int current = size++;
  Heap[current] = comp;             
  while ((current != 0)  && (Heap[current].compareTo(Heap[parent(current)]) > 0)) {
    swap(Heap, current, parent(current));
    current = parent(current);
  }
  Heap[current].setHeapLoc(current); //<-------This line is the problem
  return curr;
}

在我在上面的方法中指出的那一行,我得到错误&#34;方法setHeapLoc(int)未定义为CompEq&#34;

类型

同时,在主要方法中,如果我说:

CompEq temp = new CompEq(eq);
temp.setHeapLoc(1);

效果很好。

任何人都知道造成这种情况的原因是什么?

编辑:施法无济于事。将其更改为

Heap[current].setHeapLoc(current);

ADDS错误&#34;从CompEq到CompEq的不必要的演员。&#34;

2 个答案:

答案 0 :(得分:0)

CompEqHeap的子类setHeapLocCompEq定义了((CompEq)Heap[current]).setHeapLoc(current) 吗?

在这种情况下,您需要在调用函数之前将其强制转换。我希望你意识到这可能是某个地方糟糕设计的迹象

{{1}}

答案 1 :(得分:0)

由于方法setHeapLoc未定义为堆类型,因此将导致编译错误。因此,允许此赋值,因为Heap是CompEq的超类。为了使用类类型的引用来调用方法,必须在类层次结构中的该类或其上定义该方法。因此,Class Heap的对象无法调用Class CompEq中存在的方法,因为CompeqMethod方法不存在于Class Heap或其任何超类中。因此,通过将Heap对象引用转换为CompEq类对象引用,可以通过简单的向下转换来解决此问题,如程序中所做的那样。

((CompEq)Heap [current])。setHeapLoc(current);