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