В этой статье сделана попытка объяснить некоторые термины объектно-ориентированного программирования Java, и ответить на вопросы: что значит слово extends в определении класса? Что значит слово implements в определении класса? В чем разница между extends и implements? Что такое interface? Что такое @Override?
Если коротко, то:
extends это ключевое слово, предназначенное для расширения реализации какого-то существующего класса. Создается новый класс на основе существующего, и этот новый класс расширяет (extends) возможности старого.
implements это ключевое слово, предназначенное для реализации интерфейса (interface).
Оба ключевых слова extends и implements используются, когда Вы создаете свой собственный класс на языке Java. Различие между ними в том, что implements означает, что Вы используете элементы интерфейса в Вашем классе, а extends означает, что Вы создаете подкласс от класса, который расширяете (extend). В новом классе Вы можете расширить только один класс, но Вы можете реализовать столько интерфейсов, сколько захотите.
Тут появилось словечко интерфейс (interface). Разница между interface и обычным классом (regular class) - то, что в интерфейсе Вы не можете определить определенную реализацию (только ее "интерфейс"), а в классе можете. Если сказать точнее, то это означает, что в интерфейсе Вы можете только указать методы, но не реализовывать их. Только класс может реализовать (implement) интерфейс. Класс также может расширить (extend) другой класс. Аналогично, интерфейс может расширить другой интерфейс. Реализация (implements) используется для интерфейса, и расширение (extends) используется для расширения класса. Когда Вы должны выбрать между реализацией интерфейса или расширением класса, пойдите по пути реализации интерфейса, так как класс может реализовать множество интерфейсов, но расширить можно только один класс.
Java не поддерживает множественное наследование (multiple inheritance) для классов. Эта проблема также решается путем использования нескольких интерфейсов.
@Override ключевое слово, которое позволяет в дочернем классе заново создать реализацию метода родительского класса.
Пример реализации интерфейса (как используется ключевое слово implements):
//Интерфейс, здесь нет реализации методов,
// только их объявления:
public interface ExampleInterface
{
public void do();
public String doThis(int number);
}
Интерфейс также может содержать в себе декларации полей констант, аннотации, интерфейсы и даже классы.
//А вот это уже реализация (применение ключевого слова implements):
public class sub implements ExampleInterface
{
public void do()
{
//определите то, что должно произойти
...
}
public String doThis(int number)
{
//определите то, что должно произойти
...
}
}
Теперь пример расширения класса (применение ключевого слова extends):
//Исходный класс, который будет расширен:
public class SuperClass
{
public int getNb()
{
//определите то, что должно произойти
return 1;
}
public int getNb2()
{
//определите то, что должно произойти
return 2;
}
}
//Производный класс, расширяющий исходный:
public class SubClass extends SuperClass
{
//Вы можете переназначить (override) реализацию метода:
@Override
public int getNb2()
{
return 3;
}
}
Вот что получится в результате:
SubClass s = new SubClass();
s.getNb(); //возвращает 1
s.getNb2(); //возвращает 3
SuperClass sup = new SuperClass();
sup.getNb(); //возвращает 1
sup.getNb2(); //возвращает 2
Чтобы лучше понять работу терминов extends, implements, interface, @Override, необходимо изучить принципы объектно-ориентированного программирования: динамическое связывание (dynamic binding), полиморфизм (polymorphism) и общее наследование (general inheritance) [1].
[Ссылки]
1. Lesson: Interfaces and Inheritance site:docs.oracle.com. |
Комментарии
Конечно, в С# все проще, поставил двоеточие и пиши чего ты расширяешь или реализуешь. Но в Java после Microsoft пришлось мозг себе перестраивать.
RSS лента комментариев этой записи