Я работаю над приложением для 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

Есть ли способ вставить мой собственный класс в дерево наследования?

0
HappyCoder86 25 Авг 2011 в 21:18

2 ответа

Лучший ответ

Нет, не можешь. Трудно сказать, какой именно здесь подход лучше всего, но я бы по крайней мере попробовал использовать композицию вместо наследования. Можете ли вы реализовать отдельный объект бездействия и использовать один из объектов как из A, так и из B?

4
Jon Skeet 25 Авг 2011 в 17:20

Ну, поскольку ваш код действительно является MapActivity, он должен расширять его (при условии, что вы не хотите делать композицию). Если вы хотите сделать композицию, сделайте так, чтобы ваш класс имел ссылку на MapActivity, которая позволит вам взаимодействовать с этим классом.

1
Woot4Moo 25 Авг 2011 в 17:24