2012-04-12 2 views
2

У меня есть много классов «формы», все из которых расширяются Form. У меня есть абстрактный класс под названием FormService и конкретные службы форм, которые расширяют этот класс. То, что я хочу сделать, - это абстрактный метод, называемый populate(), который принимает тип формы, тем самым вызывая правильную услугу для данного типа через наследование.Наследование Java с абстрактным методом

Так что у меня что-то вроде:

public abstract FormService { 
    public abstract void populate(Form form); 
} 

public TestFormService extends FormService { 
    public void populate(TestForm form) { 
     //populate 
    } 

Где TestForm тип, который расширяет Form. Возможно ли это, потому что я не могу получить эффект, который я хочу.

ответ

9

Вы могли бы использовать дженерики:

public abstract FormService<F extends Form> { 
    public abstract void populate(F form); 
} 

public TestFormService extends FormService<TestForm> { 
    @Override 
    public void populate(TestForm form) { 
     //populate 
    } 
} 

Обратите внимание, что использование @Override здесь только хорошая практика, но не связанные с вопросом.

+0

+1 для символа '@ Override' –

+0

Спасибо за то, что Пол :) +1 –

-1

Да, это возможно. Как и при переопределении метода в дочернем классе, всегда можно использовать подкласс суперкласса, объявленного как аргумент в методе родительского класса. В этом примере, поскольку testForm является подклассом класса Form, это будет работать. Правило «большого пальца» во время переопределения мы всегда можем ограничить иерархию, но не расширять иерархию.

Предположим, что родительский класс класса Form является документом. В методе заполнения класса TestFormService мы не можем использовать Document в качестве аргумента. Это нарушит правила переопределения.

+1

Вы не должны описывать перегрузку, тогда OP спрашивает об переопределении. Итак, пожалуйста, напишите пример того, что вы имеете в виду, поэтому более понятно, что вы имеете в виду. – Tom

+0

Я попытался добавить пример кода. Но дает некоторую ошибку форматирования. – user3395036

+0

http://stackoverflow.com/help/formatting – Tom

Смежные вопросы