我正在尝试实现一个简单的 binary heap用户可以在其中选择他们想要最小堆还是最大堆的类。
我做了父类(super class)抽象:
abstract class Heap
{
size() { ... }
peek() { ... }
}
main 方法选择实例化 maxHeap 或 minHeap 子类。
public static void main(String[] args)
{
Heap myHeap = new minHeap();
if ( /* some condition */ )
myHeap = new maxHeap();
}
myHeap.insert(/* some value */);
插入函数在最小堆和最大堆类中的实现方式不同:
class minHeap extends Heap
{
public void insert() { ... }
}
class maxHeap extends Heap
{
public void insert() { ... }
}
当然,从 main 调用 insert() 会抛出一个错误,因为在 Heap 类中没有这样的方法。在非常相似的最小堆和最大堆实现之间以编程方式进行选择的最佳方式是什么?
最佳答案
insert
在这两种情况下似乎具有相同的签名,因此您可以将它拉到父类(super class)中。只要签名相同,它们的实现方式是否不同并不重要。
然后你的 Heap 类变成了
abstract class Heap
{
size() { ... }
peek() { ... }
abstract void insert();
}
关于java - 访问对象(动态选择的)子类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29814682/