Форум программистов, компьютерный форум CyberForum.ru

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

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

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

06.09.2014, 06:29. Просмотров 423. Ответов 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.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2014, 06:29     Переопределение подкласса
Посмотрите здесь:

Переопределение 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(){ ...

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
06.09.2014, 11:47     Переопределение подкласса #2
Ну я так думаю нужно переопределить все методы, а в не нужных оставить так:
Java
1
2
3
4
@Override
public void Init(){
     super.Init();
}
И названия методов пишутся в camelStyle т.е. с маленькой буквы) Не критично конечно, но читать удобнее.
Tester64
395 / 356 / 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
Это был просто образец... на скорую вырывал из моего проекта куски кода и упрощал названия...
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
06.09.2014, 13:05     Переопределение подкласса #4
А Holder один и тот же, имею ввиду сам класс?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.09.2014, 14:44  [ТС]     Переопределение подкласса #5
Цитата Сообщение от Spelcrawler Посмотреть сообщение
А Holder один и тот же, имею ввиду сам класс
Неа! В этом весь смысл! У родителя свой, а у наследника свой. И родитель пользуется своим в закрытых методах. А я хочу переопределить только под-класс не трогая остальные методы. И что-бы наследник вместо родительского использовал уже свой подкласс.

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

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

Наследник с холдером и выводом - это компактно и читабельно. Сейчас вынужден тащить за собой всю математку работы с холдером (от родителя к наследнику), а это (пока только) в 5 раз больше кода.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
06.09.2014, 16:04     Переопределение подкласса #6
А почему бы не сделать один класс, и отдельно Holder или 2 разных, и не переопределчть навый класс а просто создать 2 его экземпляра и на вход им сунуть разные Holder'ы?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
06.09.2014, 17:15  [ТС]     Переопределение подкласса #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
на вход им сунуть разные Holder'ы
Как это сунуть? Передать ТИП для работы? Что-бы он сам мог их создавать и хранить.
Я только за, но не знаю как... Никогда не работал с чистыми типами...
EVP
321 / 243 / 43
Регистрация: 14.12.2010
Сообщений: 462
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 Посмотреть сообщение
Я только за, но не знаю как... Никогда не работал с чистыми типами...
Поздравляю, ты добрался до Паттернов программирования.
Насколько я тебя понимаю, читать ты их не будешь, потому прикинь сколько тебе велосипедить ещё...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2014, 08:54     Переопределение подкласса
Еще ссылки по теме:

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

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

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

Переопределить метод toString для подкласса - Java SE
Допустим есть класс Car: import java.lang.reflect.*; public class Car implements Comparable<Car>{ private String mark; private...

Создать два подкласса одного класса - C++
Нужно создать базовый класс Animal и два его подкласса (Tiger и Fox). Поля каждого класса могут быть созданы произвольно. Я...


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

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

Отдельно спасибо за книжку... Уже скачал. Может как-нибудь полистаю... Начало скучное, качество сканирования около 70-80%. В элекронке с монитора читать не удобно. Бумажного пока не надо. И уж если учиться, то лучше на С++ перейти... Все-таки недолюбливаю яву... Душой отрицательно отношусь к полному опенсорсу на стороне клиента... Сейчас осваиваю NDK и собираю под него свой фреймворк.
Yandex
Объявления
07.09.2014, 08:54     Переопределение подкласса
Ответ Создать тему
Опции темы

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