Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите, пожалуйста, с замещением. Реализовать замещение для заданного клас 
V
    Опции темы
arcsupport
Дата 26.12.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Существует класс:
Код

public class A {
...
public void method1() {
...
double x = q(n);
...
}
...
public double q(int n) {
return ...;
}
...
}

Я хочу в головной программе создать экземпляр класса A, но только чтобы обработчик public double q(int n) был иным.
Как это реализовать по такому типу:
Код

        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new MainJFrame().setVisible(true);
            }
        });
Речи об использовании public double q(int n) в java.awt.EventQueue.invokeLater не идёт, просто я не хочу явно описывать класс-наследник.

Это сообщение отредактировал(а) arcsupport - 26.12.2011, 15:14
PM MAIL   Вверх
Stolzen
Дата 26.12.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



А точно так же - с помощью переопределения метода в анонимном классе 

Код

public class A {
    public void method1() {
        double x = q(100);
    }
    
    public double q(int n) {
        return 1;
    }
}


и 

Код

public static void main(String[] args) {
    System.out.println(new A() {
        @Override
        public double q(int n) {
            return 0;
        }
    });
}


Это сообщение отредактировал(а) Stolzen - 26.12.2011, 15:31


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
arcsupport
Дата 26.12.2011, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Спасибо. Вот что я сделал:
Код
package javaapplication18;

class A {

    public void method1(int m) {
        System.out.println(q(m));
    }

    public double q(int n) {
        return n * 100;
    }
}

public class JavaApplication18 {

    public static void main(String[] args) {
        A a1 = new A();
        a1.method1(5);
        a1.method1(6);
        A a2 = new A() {
            @Override
            public double q(int n) {
                return n*n;
            }
        };
        a2.method1(5);
        a2.method1(6);
    }
}

PM MAIL   Вверх
arcsupport
Дата 27.12.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Объясните, пожалуйста, каким образом можно реализовать callback-функцию.
PM MAIL   Вверх
Stolzen
Дата 27.12.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Сделать интерфейс Callback, который будут ожидать получатели - и выполнять его.

Например:
Код

public class CallbackTest {
    public static void main(String[] args) {
        Worker worker = new Worker();
        
        final int someLocalVariable = 10;
        
        worker.apply(new Callback() {
            @Override
            public void apply() {
                System.out.println("doing some work with " + someLocalVariable);
            }
        });
    }

}

class Worker {
    void apply(Callback callback) {
        callback.apply();
    }
}

interface Callback {
    void apply();
}





--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
arcsupport
Дата 27.12.2011, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Stolzen, оцените:
Код
interface Callback {

    public double sqr(double x);
}

class Worker {

    void apply(Callback callback, double x) {
        System.out.println("The result is " + callback.sqr(x));
    }
}

public class Main {

    public static void main(String[] args) {
        Worker A = new Worker();
        Callback B = new Callback() {

            @Override
            public double sqr(double x) {
                return x * x * x;
            }
        };

        A.apply(B, 10.0);
    }
}


Это сообщение отредактировал(а) arcsupport - 27.12.2011, 13:18
PM MAIL   Вверх
Stolzen
Дата 27.12.2011, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Имя для метода не очень логично выбрано. Почему sqr когда вычисляется возвдение в куб? Логичнее было бы назвать, например, calc


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
arcsupport
Дата 27.12.2011, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: 1
Всего: 2



Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1149 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.