Название вашего вопроса звучит так, как будто вы ищете множественное наследование, что не разрешено в Java.В отличие от C ++, класс может extend
один и только один класс.Тем не менее, Java также имеет interface
, что, я подозреваю, может быть тем, что вы ищете.
Класс interface
не может быть создан и может иметь абстрактные методы.Конкретный класс может implement
столько интерфейсов, сколько необходимо, и конкретный класс должен реализовывать каждый абстрактный метод, объявленный интерфейсом.Абстрактные классы также могут реализовывать интерфейсы, а абстрактные методы, которые они не реализуют, должны быть реализованы конкретными классами, расширяющими их.
Я предлагаю извлечь ваши методы аутентификации в interface
, возможно, называемый AuthRule
или что-то подобное.AuthRule
может иметь абстрактные методы с аутентификацией для представления без предоставления точного стиля, используемого для аутентификации.Таким образом, вы реализуете AlwaysAllow implements AuthRule
, и тогда методы authenticate
в AlwaysAllow
всегда будут возвращать true
.
Однако, во-вторых, вы, похоже, пытаетесь использовать наследование когда композиция лучше подойдет вашим потребностям.Теперь, когда у вас есть Person
наследует его правило аутентификации, вместо этого правило должно быть полем члена внутри Person
.Так, например:
class Person extends User {
AuthRule rule;
Person(AuthRule myrule) {
rule = myrule;
}
bool authenticate(...) {
return rule.authenticate(...);
}
}
Если вы следуете шаблону проектирования, основанному на внедрении объектов в другие объекты для смешивания необходимых вам функций, ваш код станет намного более удобным и расширяемым.Надеюсь, это поможет вашей проблеме.