Я работаю над приложением для Android, которое в настоящее время имеет два действия, A и B, которые имеют общий код, их меню параметров и некоторый другой код. Чтобы сократить копирование и вставку, я создал класс под названием BaseActivity, который расширяет Activity с помощью, а затем у меня были A и B для расширения BaseActivity. По крайней мере, это то, что я хотел сделать, но столкнулся с проблемой. Хотя A теперь отлично расширяет BaseActivity, я не могу понять, как заставить B расширять BaseActivity, потому что это не просто действие, это MapActivity. Итак, это дерево наследования выглядит так:
Дерево наследования MapActivity:
java.lang.Object
android.content.Context
android.content.ContextWrapper
android.view.ContextThemeWrapper
android.app.Activity
com.google.android.maps.MapActivity
Но для того, чтобы он унаследовал мой код, мне нужно было сделать так, чтобы он выглядел так:
java.lang.Object
android.content.Context
android.content.ContextWrapper
android.view.ContextThemeWrapper
android.app.Activity
mypackage.BaseActivity
com.google.android.maps.MapActivity
Есть ли способ вставить мой собственный класс в дерево наследования?
2 ответа
Нет, не можешь. Трудно сказать, какой именно здесь подход лучше всего, но я бы по крайней мере попробовал использовать композицию вместо наследования. Можете ли вы реализовать отдельный объект бездействия и использовать один из объектов как из A, так и из B?
Ну, поскольку ваш код действительно является MapActivity, он должен расширять его (при условии, что вы не хотите делать композицию). Если вы хотите сделать композицию, сделайте так, чтобы ваш класс имел ссылку на MapActivity, которая позволит вам взаимодействовать с этим классом.
Похожие вопросы
Новые вопросы
java
Java - это язык программирования высокого уровня. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег редко используется отдельно и чаще всего используется вместе с [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] и [maven].