Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 18:46   #1
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию Проблема с чтением кода

Прочитал сегодня такой код:

Код:
        fade2.setAnimationListener(new AnimationListener(){
        	
        	public void onAnimationEnd(Animation animation) {
        		startActivity(new Intent(QuizSplashActivity.this,QuizMenuActivity.class));
        		QuizSplashActivity.this.finish();
        	}

        });
Я понимаю, что он делает целиком весь, я не могу понять, как он конкретно работает.

Вызывается метод "setAnimationListener()" экземпляра fade2. В качестве параметра ему передаётся новый экземпляр класса AnimationListener, причём конструктор объекта вызывается без параметров. Но, вот, что происходит дальше - не понятно.
Объясните, пожалуйста.

P.S. понимаю, что мне с таким вопросом надо на форум к андроид девелоперам, но тут вопрос именно в синтаксисе Java (я - программист встраиваемых систем, для меня это слишком высокоуровневый язык).
amdbodia вне форума Ответить с цитированием
Старый 18.12.2011, 01:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это фича джава, тут же при создании объекта переопределить чтото в его коде.
то есть мы создали AnimationListener, который имеет onAnimationEnd определенным в наш код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.12.2011, 00:29   #3
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Простите, получается что можно переопределить метод для отдельного объекта? Это не противоречит принципам ООП? Или я что-то не понимаю?

Или получается, что мы не создаём объект класса AnimationListener, а создаём объект подкласса (в котором переопределён метод onAnimationEnd), название которому мы не даём?

Будет ли следующий кусок кода эквивалентен предыдущему?

Код:
class myAnimationListener extends AnimationListener
	{
        @Override
    	public void onAnimationEnd(Animation animation) 
    	{
    		startActivity(new Intent(QuizSplashActivity.this,QuizMenuActivity.class));
    		QuizSplashActivity.this.finish();
    	}
    }
        fade2.setAnimationListener(new myAnimationListener());
amdbodia вне форума Ответить с цитированием
Старый 19.12.2011, 00:31   #4
amdbodia
Пользователь
 
Аватар для amdbodia
 
Регистрация: 13.05.2009
Сообщений: 71
По умолчанию

Да, и ещё, это работает только с методами, определёнными как abstract?


UPD:
Я только сейчас заметил, что AnimationListener - это интерфейс, а не класс. Значит, код из первого поста можно заменить на такой:

Код:
class myAnimationListener implements AnimationListener
	{
    	public void onAnimationEnd(Animation animation) 
    	{
    		startActivity(new Intent(QuizSplashActivity.this,QuizMenuActivity.class));
    		QuizSplashActivity.this.finish();
    	}
//Тут реализация остальных методов
    }
        fade2.setAnimationListener(new myAnimationListener());
Так - правильно?

Последний раз редактировалось amdbodia; 19.12.2011 в 00:39.
amdbodia вне форума Ответить с цитированием
Старый 19.12.2011, 00:56   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Так - правильно?
да можно заменить.
Цитата:
Простите, получается что можно переопределить метод для отдельного объекта? Это не противоречит принципам ООП?
нет не противоречит, и Java это позволяет, по сути у вас анонимный внутренний класс.
Цитата:
Да, и ещё, это работает только с методами, определёнными как abstract?
этого честно говоря я не знаю.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с чтением файлов в Си CraZZZy-GameRRR Помощь студентам 0 08.12.2011 01:40
Проблема с чтением из memo LusterXXX Помощь студентам 3 17.09.2011 16:40
проблема с чтением из файла salwator Помощь студентам 1 23.12.2010 12:11
Проблема с чтением из файла slamm PHP 12 16.01.2010 16:40
проблема с чтением из файла Tesmont Общие вопросы C/C++ 0 20.05.2009 19:39