2015-04-23 72 views
1

我试图实现一个简单的binary heap类,用户可以在其中选择是否需要最小或最大堆。访问对象的(动态选择的)子类的函数

我提出的超类抽象:

abstract class Heap 
{ 
    size() { ... } 

    peek() { ... } 
} 

主要方法选择来实例化要么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() { ... } 
} 

当然,调用插件()从主引发错误,由于在Heap没有这样的方法类。以编程方式选择非常类似的最小和最大堆实现的最佳方式是什么?

+4

如果'insert'的实现方式不同,是不是可以在'Heap'类/接口中定义? – MadProgrammer

+1

'insert'应该是'Heap'类中的抽象方法 – Phoenix

+2

另外,请尊重Java命名约定。 Java类应该以大写字母开头:MaxHeap,MinHeap。 –

回答

7

insert在两种情况下似乎都具有相同的签名,因此您可以将其拉到超类。只要签名是相同的,它们的实现方式是否相同并不重要。

你堆类,然后变成

abstract class Heap 
{ 
    size() { ... } 

    peek() { ... } 

    abstract void insert(); 
} 
3

您可以只添加插件()以类堆中。