Страницы

Поиск по вопросам

пятница, 29 марта 2019 г.

Принцип работы интерфейсных переменных в Java

Только начал изучать Java, поэтому вопрос скорее всего глупый. Пример кода из Хорстманна:
public class TimerTest { public static void main(String[] args) { ActionListener listener = new TimePrinter();
// construct a timer that calls the listener // once every 10 seconds Timer t = new Timer(10000, listener); t.start();
JOptionPane.showMessageDialog(null, "Quit program?"); System.exit(0); } }
class TimePrinter implements ActionListener { public void actionPerformed(ActionEvent event) { Date now = new Date(); System.out.println("At the tone, the time is " + now); Toolkit.getDefaultToolkit().beep(); } }
Почему в данной строчке используется интерфейсная переменная? Почему не объектная? Что за процесс происходит?
ActionListener listener = new TimePrinter();


Ответ

Если в будущем вы захотите использовать не TimePrinter, а другую реализацию ActionListener? Конечно, можно делать как вам вздумается. А сделано для того, чтобы можно было на лету менять конечную реализацию (к примеру, вместо TimePrinter использовать MsecTimePrinter, т.е. другую реализацию интерфейса ActionListener).
Поэтому и принято оперировать интерфейсами. Чтобы не связывать свой код жестко конкретными реализациями, т.к. в интерфейс можно присвоить любой класс, который реализует данный интерфейс. Это ПРАВИЛЬНЫЙ подход к написанию кода
А процесс происходит довольно простой: вы объявляете интерфейсную переменную типа ActionListener и связываете её с объектом TimePrinter. В последующем вы используете только методы интерфейса ActionListener, что освобождает вас от знания конкретной реализации самого класса TimePrinter

Комментариев нет:

Отправить комментарий