2015-04-23 76 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

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