У меня есть интерфейс A, для которого я должен предоставить несколько различных реализаций . Однако эти реализации используют некоторые вспомогательные методы, поэтому Я переместил эти методы в абстрактный базовый класс.Что (не) объявить при реализации интерфейса с абстрактным классом?
Interface A {
void doX();
}
abstract Class B implements A {
protected void commonY() {
// ...
}
@Override
public abstract void doX();
}
Class C extends B {
@Override
public void doX() {
// ...
}
}
Class D extends B {
@Override
public void doX() {
// ...
}
}
Мой код работает, как ожидалось, но у меня есть несколько вопросов:
Должен ли я объявить абстрактный метод DOX() в классе B? Почему нет)?
Должен ли я также явно объявлять «реализует A» в классах C и D? Почему нет)?
Преимущество этого решения в том, что, когда класс X, реализующий Z, но который требует функциональности метода commonY, вводится, он может специализировать класс B. – 2008-12-09 11:59:03