JavaRush /Java блогы /Random-KK /Interface в Java
vinsler
Деңгей

Interface в Java

Топта жарияланған
Я плохой рассказчик, если у меня нет цели объяснить что-то непонятное кому-то с конкретным requestом, поэтому разбираюсь в простом, ну и за одно напишу об этом тут. Я не придерживаюсь примера обучения JavaRush, How то, что сначала задать вопрос, а потом рассказывать, How это делать. Я сторонник сначала рассказать, а потом спрашивать, How и при рассказе, сначала показать, а потом объяснять.
Interface в Java - 1
BS: Действия == поведение, воспринимайте How синонимы, просто действия более правильно понимаются, это всегда нечто активное, а поведение может ничего не показывать.

interface — интерфейс

What это? Пример листинга интерфейса (с generics):

public interface Store<T, ID> {
    void add(T t);
    void update(T t, ID i);
    void delete(ID i);
    T findOne(ID i);
    List<T> findAll();
}
Распространенный круд (от CRUD: Create, Read, Update, Delete) интерфейс. Не пугайтесь, все достаточно просто. Интерфейс этот означает, что работа со многими базами данных строится по такому принципу: нужно добавить запись, обновить запись, удалить и найти все записи. Вы еще 100 раз это встретите и сами столько же раз напишете почти такой же интерфейс. Обозначается public, потому что должен реализовываться (implements) классом. What значит реализовываться классом? Все очень просто: он должен расписать в себе все методы интерфейса. Простейший пример реализации в классе:

void add (T t) {
	bookstore.add(t);
}
Вместо T t, будет подставляться некий дженерик. В двух словах это ТИП переменной, поэтому и обозначается чаще всего How T = Type. В нашем примере, допустим, может быть такой:

void add (Book book) {
	bookstore.add(book);
}
Естественно, на место Book book вы можете подставить любую переменную, которая вам нужна для вашей реализации. Для понимания можно теоретически представить, что T = Object, а поскольку в Java все является Object, можно определить туда также любой ваш класс/переменную. Единственный трабл будет возникать потом — эксепшены, если класс нулевой и т.п. Своими словами — некая программная структура, определяющая отношения между an objectми, посредством разделения их на некие поведенческие части. Цель интерфейса — определение функционала для реализации его классом. То есть, описание сигнатур методов. Внутри интерфейса находятся названия методов, возвращающие и входящие значения, и все. Ну можно еще обозначить там Howие-то переменные, но они сразу становятся неявно public static final, и могут быть доступны из любой части программы. Интерфейс описывает действия, а поэтому в нем находятся эти самые действия, т.е. функции or методы. Зачем это нужно? What это упрощает or Howие дает преимущества? Упрощение описания действий, поведения. Мы говорим что делать, а How это делать, каждый класс реализует сам. Экономия времени в больших проектах. Интерфейсы создаются в ситуациях, когда мы знаем, что нужно выполнить некоторую задачу, но How это сделать, может отличаться. Интерфейс описывает названия действий — это просто How направление некой абстракции. Хотя могут встречаться и интерфейсы без методов и полей, такие How маркеры, типа Cloneable, Remote и т.п. Возьмем всеми любимый пример с автомобилем. Интерфейс в нем будет описывать возможные действия машины, поворот руля or направление движения, набор скорости, остаток бензина и т.п. То есть те самые действия, которые могут быть у абсолютно любого автомобиля. Другими словами, мы опускаемся в дебри деградации на самый низший уровень создания самого первого автомобиля и своими мозгами додумываем, How он создавался и что у него было. Естественно, мы описываем это абстрактно и только для действий. What было у самого первого авто? Руль был? Был, значит куда-то поворачивался, направление руля/движения. Колеса были? Да, значит ехал с Howой-то speedю, изменение скорости. Вот и весь интерфейс. Но в целом интерфейсы создаются под Howую-то реализацию неких действий. Т.е. мы пишем программу для более конкретных, чем для вообще всего, что только можно придумать. Поэтому и сами интерфейсы будут содержать более четкие и конкретные методы. Конечно же они будут настолько абстрактны, насколько это возможно. Интерфейсы могут быть наследованы друг от друга How классы.

interface MyInterface extends NotMyinterface;
Интерфейсы реализовываются в классах. Реализовывать можно сколько угодно интерфейсов. В отличие от наследования, наследоваться только от одного.

class NewClass extends OldClass implements MyInterface, NotMyinterface;
Т.е. мы придумали Howие-то действия, придумали им названия, входящие данные, возвращаемые данные, написали все это в интерфейсе, потом создали класс и добавor наш интерфейс к этом классу, т.е. реализовали наш интерфейс в этом классе. Далее все описаные в интерфейсе методы/функции, должны обязательно иметь реализацию. Ее можно сделать непосредственно в самом интерфейсе, добавив слово default перед методом и написав реализацию прямо в методе, подобно классу. Это стало возможным с 8-й версии Java. Также ее можно сделать в классе, который будет реализовывать этот интерфейс. Ну вот, интерфейс написали, заимплементor в класс, накатor реализацию в классе, можно запускать и тестить. Так же можно почитать в интерфейсах про:
  • Статические методы.
  • Приватные методы. (повтор codeа)
  • Переменные/Константы.
  • Вложенные интерфейсы.
Но это уже лучше попозже, да и лишним голову забивать тоже вредно. Интересный вопрос, что такое Volvo? Class or Interface?

line1: Volvo v = new VolvoV2(); 
line2: Volvo v = new VolvoV3(); 
Помимо интерфейсов, стоит продолжить про Абстрактные классы и Классы. Может потом, когда будет еще пара часов свободных. ))) PS: Ребята, всю критику прошу под постом or в ЛС, я прекрасно понимаю, что она есть у всех ))) и мне всегда интересно ее услышать, потому что это повод стать немного лучше и опять таки продолжать двигаться вперед. На этом всем Вам огромное спасибо и удачи в программировании. )))
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION