2010-11-16 2 views
2

Я уверен, что помню, что я читал, что есть способ сделать какой-либо подкласс суперкласса определенным методом. Как мне это сделать?Принудительно унаследованные классы для определения определенных методов

В моем примере суперкласс является учетной записью (и является абстрактной), а подклассы - SavingsAccount и CurrentAccount. Все подклассы должны реализовать свой метод remove().

ответ

7

Определите этот метод в абстрактном классе.

public abstract <returnType> withdraw(); 

Тогда, любой класс, который расширяет абстрактный класс будет вынужден реализовать метод withdraw.

3

Положить public abstract void withdraw(); в учетную запись.

1

если SavingAccount и CurrentAccount не знают друг о друге, и каждый расширяет счет, так что вы должны просто упомянуть об этом в своем классе Account:

public abstract <return type> withdraw(); 

Так производные классы (если они не являются абстрактный) должен реализовать этот метод.

+1

Вам также нужно указать тип возврата :) –

+0

спасибо, исправлено ответ –

1

Если Account class уже есть abstract. Вы можете добавить abstract метод, называемый withdraw(), пример:

public abstract void withdraw();

Это заставит CurrentAccount и SavingsAccount переопределить отзывать().

Выгода от абстрактного класса заключается в том, чтобы вы могли добавлять методы (в учетную запись), которые могут вызывать подклассы (CurrentAccount, SavingsAccount).

Это очень полезно, чтобы не писать один и тот же код дважды.

Этот сценарий хорошо работает с заводским шаблоном в вашем случае.

0

Если вы объявили класс и метод учетной записи как абстрактные, то компилятор даст вам сообщение об ошибке, если вы не реализуете абстрактный метод в своих подклассах, расширяющих класс Account.

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