Java extends что значит

Java — разница между extends и implements на примерах

После продолжительного программирования на C++ переходить на Java бывает болезненно. С одной стороны прославленный сборщик мусора, а с другой огромное множество принципиальных различий в подходах к программированию. Об одном таком отличии я сегодня расскажу подробнее.

Речь пойдет о наследовании в Java. В отличии от C++, где наследование могло быть множественным, здесь это не совсем так. Кроме того, привычный синтаксис через «:» заменился на целых два ключевых слова: extends и implements. Начну с первого.

Ключевое слово extends в Java

Действие ключевого слова в точности совпадает с его переводом, один класс расширяет другой, что является классическим наследованием. Правила видимости полей и методов сохранились: private доступны только в самом классе, protected в самом классе и во всех наследниках, к public методам и полям можно обращаться откуда угодно. Главное отличие от «сишного» наследования в том, что можно расширять только один класс. Я сейчас не буду рассуждать о том, насколько это удобно, скажу только, что со множественным наследованием в C++ постоянно творилась какая-то каша.

Небольшой пример наследования с помощью ключевого слова extends. Напишем класс Door, который будет описывать характеристики двери, мы можем создать объект этого класса и работать с ним, как с «просто дверью». С другой стороны напишем еще два класса: IronDoor и WoodDoor, которые будут расширять класс Door(== наследуются от класса Door), т.е. добавят свои характеристики к базовым.

//Базовый класс "дверь" public class Door < //Допустим, что у любой двери есть цена protected int price; //Этот метод тоже наследуется protected void doSomething() < System.out.println("Door is doing something"); >//Этот метод доступен исключительно в классе Door private void onlyForDoor() < >> //Железная дверь public class IronDoor extends Door < //Уровень защиты определен только для железных дверей private int protectionLvl; IronDoor(int price, int protectionLvl) < this.price = price; this.protectionLvl = protectionLvl; >> //Деревянная дверь public class WoodDoor extends Door < //Характеристика "порода древесины" доступна только деревянной двери private String woodType; WoodDoor(int price, String woodType) < this.price = price; this.woodType = woodType; >>

Ключевое слово implements в Java

С ключевым словом implements связано чуть больше хитростей. Слово «имплементировать» можно понимать, как «реализовывать», а в тот самый момент, когда возникает слово «реализовывать», где-то недалеко появляются интерфейсы. Так вот конструкция public class Door implements Openable означает, что класс дверь реализует интерфейс «открывающийся». Следовательно класс должен переопределить все методы интерфейса. Главная фишка в том, что можно реализовывать сколь угодно много интерфейсов.

Зачем это нужно? Самый простой пример, который приходит в голову, два интерфейса: Openable и Closeble. В первом метод open, и метод close во втором. Они помогут научить нашу дверь закрываться и открываться.

public interface Openable < void open(); >public interface Closeble < void close(); >public class Door implements Openable, Closeble < protected int price; protected void doSomething() < System.out.println("Door is doing something"); >//Реализованные методы @Override public void open() < >@Override public void close() < >>

В классах-потомках двери(железная и деревянная двери) тоже появятся методы открыть/закрыть, реализованные в классе Door. Но никто нам не запрещает их переопределить.

public class IronDoor extends Door < private int protectionLvl; IronDoor(int price, int protectionLvl) < this.price = price; this.protectionLvl = protectionLvl; >//Переопределяем методы @Override public void open() < System.out.println("The IRON door is opened"); >@Override public void close() < System.out.println("The IRON door is closed"); >>

Заключение

Итак, главное отличие в том, что extends используется для наследования от класса в прямом смысле этого слова, а implements позволяет «реализовать интерфейс». На первый взгляд это кажется лишним, неудобным и непонятным, но стоит пару раз использовать по назначению и все встает на свои места. На сегодня у меня все, спасибо за внимание!

Читайте также:  Python поменять тип данных

Источник

What Is Inheritance?

Different kinds of objects often have a certain amount in common with each other. Mountain bikes, road bikes, and tandem bikes, for example, all share the characteristics of bicycles (current speed, current pedal cadence, current gear). Yet each also defines additional features that make them different: tandem bicycles have two seats and two sets of handlebars; road bikes have drop handlebars; some mountain bikes have an additional chain ring, giving them a lower gear ratio.

Object-oriented programming allows classes to inherit commonly used state and behavior from other classes. In this example, Bicycle now becomes the superclass of MountainBike , RoadBike , and TandemBike . In the Java programming language, each class is allowed to have one direct superclass, and each superclass has the potential for an unlimited number of subclasses:

A hierarchy of bicycle classes.

The syntax for creating a subclass is simple. At the beginning of your class declaration, use the extends keyword, followed by the name of the class to inherit from:

class MountainBike extends Bicycle < // new fields and methods defining // a mountain bike would go here >

This gives MountainBike all the same fields and methods as Bicycle , yet allows its code to focus exclusively on the features that make it unique. This makes code for your subclasses easy to read. However, you must take care to properly document the state and behavior that each superclass defines, since that code will not appear in the source file of each subclass.

Источник

Java extends что значит

В этой статье сделана попытка объяснить некоторые термины объектно-ориентированного программирования 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 .

Источник

Оцените статью