Принудительно наследовать классы, чтобы определить определенные методы - PullRequest
2 голосов
/ 16 ноября 2010

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

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

Ответы [ 5 ]

7 голосов
/ 16 ноября 2010

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

public abstract <returnType> withdraw();

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

3 голосов
/ 16 ноября 2010

Положите public abstract void withdraw(); на счет.

1 голос
/ 16 ноября 2010

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

public abstract void withdraw();

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

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

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

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

1 голос
/ 16 ноября 2010

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

public abstract <return type> withdraw();

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

0 голосов
/ 16 ноября 2010

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

...