Я чувствую, что это основной вопрос с некоторым трюком.
Я хочу расширить функциональность ActionBar, при поиске кода ActionBar получается, что ActionBar является абстрактным классом, а реальный экземпляр класса - ActionBarImpl.
Этот шаблон с абстрактным и Impl для реализации широко используется в исходном коде Android.
Сайт разработчиков не останавливается на деталях, но всегда описывает абстрактный класс, как если бы он был реализованным классом.
Я вижу, что с жесткой точки зрения на языке Java я должен расширить ActionBarImpl, иначе я не смогу вызвать методы super
, но я никогда не видел примера, расширяя классы <class>Impl
.
Справка.Какой класс следует расширять, AcionBar или ActionBarImpl?
0
A
ответ
2
Единственная разница между абстрактом и реализацией в этом случае скорее всего будет абстрактным методом (методами). Если поведение по умолчанию, предоставляемое классом реализации, приемлемо, я бы сказал, что это расширение и переопределить другие методы, которые вам нужны.
Если требуемое поведение абстрактного метода означает, что вы вообще не можете использовать реализацию, то расширяйте абстрактный класс.
2
Да, вы должны расширить класс Impl для расширений, поскольку, если вы расширяете абстрактный класс, вам необходимо будет обеспечить реализацию абстрактных методов, и если это не ваше намерение «изменить» существующее поведение, а только «расширить» или добавить новое поведение, тогда вам лучше расширить класс Impl.
ОК, спасибо. Я был немного нерешительным, потому что я никогда раньше не видел класс «Импл». – ilomambo