Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация интерфейсов / 25 сообщений из 25, страница 1 из 1
25.09.2014, 17:40
    #38757918
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Есть два интерфейса и класс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
interface ITest1 {
  public void Test();
}

interface ITest2 {
  public void Test();
}

class TestA {
  public void Test() {
    ........
  }
}


Теперь я хочу реализовать такой класс
Код: java
1.
2.
3.
class TestB extend TestA implements ITest1, ITest2 {
   ......
}

но так, чтобы все три метода Test() выполняли разные действия. Это возможно? Т.е. мне нужно для произвольного метода класса TestB с нужной сигнатурой, указать, что он реализует метод интерфейса

И второй вопрос
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
interface ITest {
   .........
}

class Test implements ITest {
  private ITest test;
  ........
}

Могу ли я как-то указать, что все методы интерфейса нужно дергать из поля test или я должен явно в классе Test перечислить все методы интерфейса ITest и вручную в них обратится к методам поля?

Аналогичный вопрос если поле test - экземпляр некоторого класса, который явно не реализует интерфейс ITest, но который, содержит все необходимые методы


С уважением, Vasilisk
...
Рейтинг: 0 / 0
25.09.2014, 17:56
    #38757961
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_но так, чтобы все три метода Test() выполняли разные действия. Это возможно?
Нет.

_Vasilisk_Могу ли я как-то указать, что все методы интерфейса нужно дергать из поля test или я должен явно в классе Test перечислить все методы интерфейса ITest и вручную в них обратится к методам поля?
Либо java.lang.reflect.Proxy, либо любое другое AOP. Либо нагенерить методов. Нормальные IDE умеют генерить методы для "делегатов".

_Vasilisk_Аналогичный вопрос если поле test - экземпляр некоторого класса, который явно не реализует интерфейс ITest, но который, содержит все необходимые методы
Duck Typing в Java отсутствует.
...
Рейтинг: 0 / 0
25.09.2014, 18:05
    #38757987
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_но так, чтобы все три метода Test() выполняли разные действия. Это возможно?
Нет ничего невозможного для пытливого ума, однако представьте себе три бумажные карточки одинакового размера.
Все три одинаковым образом разлинованы шахматной доской.
На карточке A в клеточках нарисованы шахматные фигуры.
На карточках 1 и 2 пробита дырочка в клетке E2.

Вопрос можно ли накрыв карточку A поочередно карточками 1 и 2 увидеть разные фигуры в клетке E2?
...
Рейтинг: 0 / 0
25.09.2014, 18:22
    #38758017
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
BlazkowiczDuck Typing в Java отсутствует.
А wikipedia говорит об обратном.

Кстати, в 8 java можно сделать default method для интерфейса, который будет дергать делегата.

Только вот зачем это все?
...
Рейтинг: 0 / 0
25.09.2014, 19:52
    #38758107
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей АрсеньевТолько вот зачем это все?Пример номер раз
Есть класс со своим методом Run. А мне нужно реализовать интерфейс Runnable для потока, но для функции потока дергать другой метод.

Ответ на вопрос - я получил. Спасибо большое. Вопрос был чисто теоретическим. Просто я пришел в джаву из делфи, а там такие вещи возможны. Вот решил уточнить как здесь
...
Рейтинг: 0 / 0
26.09.2014, 09:20
    #38758402
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей АрсеньевА wikipedia говорит об обратном.

Нет, она не говорит об обратном. Она говорит, что это и многое другое можно эмулировать, например, рефелексией. Все о чем автор спрашивает, можно добится и рефлексией и манипуляциями с байт кодом. Но в Java языке от этого указанных фич не появится.
...
Рейтинг: 0 / 0
26.09.2014, 09:24
    #38758406
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_Есть класс со своим методом Run. А мне нужно реализовать интерфейс Runnable для потока, но для функции потока дергать другой метод.

На лямдах это делается проще
По-моему даже такое должно работать:
Код: java
1.
executor.submit(notRunnable:run());



Вы вместо того чтобы обрисовать проблему, придумали решение в стиле Delphi и спрашиваете о нем. А если обрисовать проблему целиком, ведь, возможно кто-нибудь подскажет решение в стиле Java.
...
Рейтинг: 0 / 0
26.09.2014, 09:37
    #38758421
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Blazkowicz,

Рефлексия - часть Java. Значит все, что можно сделать через рефлексию - можно сделать на Java.
Сделают это в виде синтаксического сахара или нет уже не столь важно.
...
Рейтинг: 0 / 0
26.09.2014, 09:42
    #38758430
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей АрсеньевРефлексия - часть Java. Значит все, что можно сделать через рефлексию - можно сделать на Java.
Сделают это в виде синтаксического сахара или нет уже не столь важно.
JVM часть Java. Значит всё что есть в Scalа, которая работает на JVM, есть и в Java. Автор спрашивает о языке, а не платформе. Что ты такой упертый в пятницу-то?
...
Рейтинг: 0 / 0
26.09.2014, 09:44
    #38758436
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_но так, чтобы все три метода Test() выполняли разные действия.
IMHO это действо ни для чего полезного, кроме обфускации кода не нужно. Только грабли раскладывает.
...
Рейтинг: 0 / 0
26.09.2014, 09:45
    #38758437
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_Сергей АрсеньевТолько вот зачем это все?Пример номер раз
Есть класс со своим методом Run. А мне нужно реализовать интерфейс Runnable для потока, но для функции потока дергать другой метод.

Просто передаёшь (или заранее создаёшь в переменной) new Runnable(){run(){run1()} - как-то так.


_Vasilisk_Ответ на вопрос - я получил. Спасибо большое. Вопрос был чисто теоретическим. Просто я пришел в джаву из делфи, а там такие вещи возможны. Вот решил уточнить как здесь

В delphi интерйфейсы другие- там это отдельная сущность из мира винды и преобразование между интерфейсами одного класса это интересная операция. В java решается анонимными классами.
...
Рейтинг: 0 / 0
26.09.2014, 09:47
    #38758440
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Blazkowicz,

JVM это не часть JAVA это способ его (языка программирования) реализации (стандартный).
То что топором можно рубить дрова, а можно бриться не значит, что волосы - дрова.
...
Рейтинг: 0 / 0
26.09.2014, 09:57
    #38758455
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_Есть класс со своим методом Run. А мне нужно реализовать интерфейс Runnable для потока, но для функции потока дергать другой метод.

Авторы Java -принципиальные противники множественного наследования.

Так что только через прокси.

Т.е прокси класс реализует Runnable.
По всем методам кроме run (и другие какие надо переопределить) дергает внутренний класс.
И содержит метод возвращающий оригинальный класс, для использования теми, кому нужен оригинальный.

В идеале у оригинального класса надо бы определить метод getAsNotRunnable() - который возвращает this, а у прокси внутренний.
...
Рейтинг: 0 / 0
26.09.2014, 09:58
    #38758460
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей Арсеньев JVM это не часть JAVA это способ его (языка программирования) реализации (стандартный).

Спецификация Java включает в себя JLS и JVM спецификации. Так что не надо продолжать пороть ерунду.
...
Рейтинг: 0 / 0
26.09.2014, 10:07
    #38758478
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
BlazkowiczСпецификация Java включает в себя JLS и JVM спецификации. Так что не надо продолжать пороть ерунду.
Смотрю сюда и вижу, что это разные строчки. ЧЯДНТ?
...
Рейтинг: 0 / 0
26.09.2014, 10:12
    #38758488
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей Арсеньев Смотрю сюда и вижу, что это разные строчки. ЧЯДНТ?
И обе находятся в секции Java SE Specifications. Нет Java без JVM.
...
Рейтинг: 0 / 0
26.09.2014, 10:31
    #38758513
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
BlazkowiczАвтор спрашивает о языке, а не платформе. Что ты такой упертый в пятницу-то?
не выспался.
...
Рейтинг: 0 / 0
26.09.2014, 16:38
    #38759154
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей АрсеньевJVM это не часть JAVAЕсли вы о JLS, то это - правдаэто способ его (языка программирования) реализации (стандартный)А это - нет.
...
Рейтинг: 0 / 0
26.09.2014, 16:41
    #38759160
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
_Vasilisk_, данный кейс решается не наследованием а композицией.
...
Рейтинг: 0 / 0
26.09.2014, 16:46
    #38759168
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Basil A. SidorovА это - нет.
Т.е. на jvm нельзя выполнить программу, написанную на языке программирования Java, или это не стандартный вариант?
...
Рейтинг: 0 / 0
26.09.2014, 16:49
    #38759173
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей АрсеньевТ.е. на jvm нельзя выполнить программу, написанную на языке программирования Java, или это не стандартный вариант?Ни то и ни другое.
JVM исполняет байт-код. Она накладывает определённые ограничения на структуру этого кода, но ей глубоко фиолетово, откуда этот код берётся.
JVM не зависит ни от JLS ни от Java SE/EE API. Ортогональные базисы
...
Рейтинг: 0 / 0
26.09.2014, 16:56
    #38759180
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Basil A. SidorovJVM не зависит ни от JLS ни от Java SE/EE API. Ортогональные базисы
То что на пилу можно использовать как музыкальный инструмент не означает, что она не является стандартным инструментом для распила бревен.
В таком варианте мой посыл более понятен?

P.S. Хотя с рефлексией я был не прав - это не возможность языка, а его стандартной библиотеки. :)
...
Рейтинг: 0 / 0
26.09.2014, 17:01
    #38759184
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Для термина Java существует некий дуализм смыслов. Его иногда называют языком. Иногда - машиной.
Тоесть машину могуть называть JVM а иногда и Java. Вобщем понимание зависит от контекста.
...
Рейтинг: 0 / 0
26.09.2014, 17:19
    #38759206
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Сергей АрсеньевВ таком варианте мой посыл более понятен?Нет, поскольку речь не шла о музыке и распиле брёвен, а только о распиле брёвен.
...
Рейтинг: 0 / 0
26.09.2014, 17:21
    #38759207
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация интерфейсов
Распил брёвен - оффтопик. Давайте вернёмся к вопросу.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Реализация интерфейсов / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]