Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Переопределение подкласса - Программирование Android

06.09.2014, 06:29. Просмотров 441. Ответов 8
Метки нет (Все метки)

Гуру ООП, помогите! Запутался окончательно... Возможно ли вообще подобное:

Есть класс вида:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class adapter_My extends BaseAdapter {
 
    protected static class Holder {
        public TextView textView;
    }
 
    protected void use(Holder h) {
       //
    }
    public void Init() {
       Holder holder = new Holder();
       // используем holder по разным условиям
    }
}
Хочу сделать наследника:

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class adapter_My2 extends adapter_My  {
 
    private static class Holder {
        public TextView textView1;
        public TextView textView2;
    }
    public void use(Holder h) {
       //
    }
 
// остальное не трогаем - класс сам "подхватит" новый ViewHolder
}
Не хочу подменять Init у наследника! Он сложный и в нем меняется лишь класс-холдера...

Код на примере не срабатывает - новый холдер не видит...
Уже думаю над передачей типа в виде переменной class.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2014, 06:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переопределение подкласса (Программирование Android):

Переопределение ViewBinder на C# - Программирование Android
Здравствуйте. Пытаюсь сделать урок, только на C# на VS13 с Xamarin. Код MainActivity public class MainActivity :...

Переопределение методов - Программирование Android
Здравствуйте! Помогите, пожалуйста разобраться. При вызове метода B.aa("Тест"), я получаю вывод в логах из методов B.aa(String x) и...

Переопределение метода в Runtime - Программирование Android
Создаем класс именно так BroadcastReceiver receiver = new BroadcastReceiver(); Дальше, надо в receiver переопределить onReceive....

Переопределение кнопки Home - Программирование Android
Как переопределить кнопку HomeButton? assert getSupportActionBar() != null; action_bar = getSupportActionBar(); ...

Переопределение onSaveInstanceState(Bundle) и отображение текста по нажатию - Программирование Android
Наверное сложно будет понять чего я хочу, но вдруг... Через Intent из родительской активности перехожу в дочернюю. Там при нажатии...

Конструктор подкласса - Java SE
Допустим, есть суперкласс Main и подкласс class1. В суперклассе объявлен конструктор без параметров public Main(){ ...

8
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
06.09.2014, 11:47 #2
Ну я так думаю нужно переопределить все методы, а в не нужных оставить так:
Java
1
2
3
4
@Override
public void Init(){
     super.Init();
}
И названия методов пишутся в camelStyle т.е. с маленькой буквы) Не критично конечно, но читать удобнее.
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.09.2014, 12:56  [ТС] #3
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну я так думаю нужно переопределить все методы
Не в этом смысл!
Внутри класса списка adapter_My есть подкласс! Для хранения значений в каждой строке использую подкласс Holder. Теперь хочу сделать с него наследника с другим подклассом для каждой строки. Определять подкласс хочу в наследнике, а создавать в предке. Через:
Java
1
Holder holder = new Holder();
и передавать в праметрах методов, которые могу переопределять.
Java
1
protected void use(Holder h) {
Если создаю как в примере (из первого сообщения), класс используется родительский. А new Holder(); для наследника из предка вызвать не могу. Как и передать в параметре - ява видит что это похожие по названию, но все-таки разные классы и не перекрывает старые методы. Методы считаются разными - название одно, но разные параметры.

Цитата Сообщение от Spelcrawler Посмотреть сообщение
И названия методов пишутся в camelStyle
Это был просто образец... на скорую вырывал из моего проекта куски кода и упрощал названия...
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
06.09.2014, 13:05 #4
А Holder один и тот же, имею ввиду сам класс?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.09.2014, 14:44  [ТС] #5
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А Holder один и тот же, имею ввиду сам класс
Неа! В этом весь смысл! У родителя свой, а у наследника свой. И родитель пользуется своим в закрытых методах. А я хочу переопределить только под-класс не трогая остальные методы. И что-бы наследник вместо родительского использовал уже свой подкласс.

Попробую описать реальный случай. Есть адаптер, который для хранения каждой строки использует свой класс-холдер. В холдере только одно текстовое поле. Вывод полей на экран выведен в отдельную фукнцию с параметром (ссылкой на текущий холдер).

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

Наследник с холдером и выводом - это компактно и читабельно. Сейчас вынужден тащить за собой всю математку работы с холдером (от родителя к наследнику), а это (пока только) в 5 раз больше кода.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
06.09.2014, 16:04 #6
А почему бы не сделать один класс, и отдельно Holder или 2 разных, и не переопределчть навый класс а просто создать 2 его экземпляра и на вход им сунуть разные Holder'ы?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.09.2014, 17:15  [ТС] #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
на вход им сунуть разные Holder'ы
Как это сунуть? Передать ТИП для работы? Что-бы он сам мог их создавать и хранить.
Я только за, но не знаю как... Никогда не работал с чистыми типами...
0
EVP
390 / 246 / 43
Регистрация: 14.12.2010
Сообщений: 472
06.09.2014, 19:31 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Tester64 Посмотреть сообщение
Как это сунуть? Передать ТИП для работы? Что-бы он сам мог их создавать и хранить
Нужна абстрактная фабрика, типа такого:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class adapter_My extends BaseAdapter {
 
    protected static class Holder {
        public TextView textView;
    }
 
    protected void use(Holder h) {
       //
    }
    //Для перегрузки в потомках.
    protected Holder newHolder()
    {
       return new Holder();
    }
    public void Init() {
       Holder holder = newHolder();
       // используем holder по разным условиям
    }
}
 
class adapter_My2 extends adapter_My {
 
    protected static class Holder2 public Holder {
        public TextView textView2;
    }
 
    @Override
    protected Holder newHolder()
    {
       return new Holder2();
    }
}


Цитата Сообщение от Tester64 Посмотреть сообщение
Я только за, но не знаю как... Никогда не работал с чистыми типами...
Поздравляю, ты добрался до Паттернов программирования.
Насколько я тебя понимаю, читать ты их не будешь, потому прикинь сколько тебе велосипедить ещё...
1
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
07.09.2014, 08:54  [ТС] #9
Цитата Сообщение от EVP Посмотреть сообщение
Насколько я тебя понимаю, читать ты их не будешь
Конечно нет!
Ваш пример мне ПОЛНОСТЬЮ помог. Интересная технология. Подобное использовал в Делфи, но не сразу догадался - чуть другое оформление класов сбило с мысли... И на сегодня это единственный достаточно путанный класс, с которым я сам не справился. Не догадался что единственным нерешимым местом является сам механизм создания нового класса, а для ссылки хватит и родителя. Остальное догадался сам...

Отдельно спасибо за книжку... Уже скачал. Может как-нибудь полистаю... Начало скучное, качество сканирования около 70-80%. В элекронке с монитора читать не удобно. Бумажного пока не надо. И уж если учиться, то лучше на С++ перейти... Все-таки недолюбливаю яву... Душой отрицательно отношусь к полному опенсорсу на стороне клиента... Сейчас осваиваю NDK и собираю под него свой фреймворк.
0
07.09.2014, 08:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2014, 08:54
Привет! Вот еще темы с ответами:

Вызов метода подкласса - Java SE
public class ex2_3 { public static void main(String args) { AtomBoat boat = new AtomBoat(); ((Motor4Boat)boat).startMotor();...

Создание экземпляров подкласса - Java SE
В общем задание такое: нужно определить иерархию (непринципиально какую) и создать некоторое количество объектов подкласса каждого вида. ...

AS 3.0 Удаление экземпляра подкласса - ActionScript
Здравствуйте :) прошу помощи в освоении данного материала. По рекомендации, с недавних пор начал изучать и писать код в класс. Я понял,...

Убрать лишний метод из подкласса - Java SE
Как поступают в таких случаях, когда, к примеру, есть класс Ключ, у него куча методов, один из которых Повернуть, класс ЭлектронныйКлюч...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.