2017-02-03 11 views
0

Так что я довольно новичок в Java, и у меня возникают проблемы с обволакиванием этой концепции.Интерфейсы обратного вызова в Java

Я получил это работает, делая это:

enter image description here

То, что я не понимаю, что в моем WorkerClass у меня есть конструктор, который принимает в качестве параметра типа CallBackInterface.

В моем классе Основная активность Я делаю экземпляр моего WorkerClass, передавая текущий экземпляр Main Activity..why это работает? Разве это не должно дать мне ошибку, потому что конструктор из WorkerClass требует другого параметра?

Извините, если это звучит глупо, но я хочу понять, почему он работает, а не просто помнить, что он работает так, поэтому я буду использовать его в будущем.

+4

Не размещайте фотографии кода. Код - это текст. – khelwood

+0

Что будет отличаться от требуемого параметра? Я думаю, что концепция, которую вы не понимаете, является интерфейсом Java. – chrylis

+0

Подробнее о интерфейсах в Java :) –

ответ

2

Ваша деятельность реализует CallBackInterface, поэтому вы не передаете экземпляр основной деятельности в конструктор, а скорее экземпляр реализации CallbackInterface.

Если вы удалите эту реализацию, вы получите сообщение об ошибке.

+0

Спасибо, что поняли, что ключевое слово «this» меня смутило. Еще один вопрос: если у меня есть несколько интерфейсов, реализованных в классе, и я делаю экземпляр нескольких рабочих классов, имеющих один из параметров одного из этих интерфейсов, будет ли java знать правильную? – CodeGeass

+0

Почему бы вам не попробовать себя первым? :) Ответ да, хотя, пока объект, который вы передаете в конструктор, реализует необходимый интерфейс. –

0

Почему это работает?

это работает, потому что вместо того, чтобы думать:

WorkerClass необходим интерфейс в конструкторе

вы можете (должны) думать, как

WorkerClass нужно "что-то", что может выполнить обратный вызов в конструкторе.

MainActivity реализует что CallbackInterface так это (фактически экземпляр основной деятельности) проводит этот контракт и может быть передать в качестве аргумента в конструктор.