2015-04-23 3 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 класс. Какой был бы лучший способ программно выбирать между очень похожими реализациями min и max heap?

+4

Если 'insert' реализован по-разному, не может ли он быть определен в классе/интерфейсе' Heap'? – MadProgrammer

+1

'insert' должен быть абстрактным методом в классе' Heap' – Phoenix

+2

Также, пожалуйста, соблюдайте соглашения об именах Java. Классы Java должны начинаться с буквы верхнего регистра: MaxHeap, MinHeap. –

ответ

7

insert, похоже, имеет одну и ту же подпись в обоих случаях, поэтому вы можете просто подтянуть ее до суперкласса. Неважно, если они будут реализованы по-разному, пока подписи будут одинаковыми.

Ваш класс Heap становится

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

    peek() { ... } 

    abstract void insert(); 
} 
3

Вы можете просто добавить вставку() в классе кучи.