JavaScript

Наследование методов, агрегация и композиция Java: определение и особенности

Lorem ipsum dolor

В Java присутствует несколько терминов, которые регулируют отношения между классами. Например:

  •  наследование;

  •  ассоциация и ее частные случаи: композиция и агрегация.

Отношения между классами наиболее часто вызывают проблемы у молодых Java-разработчиков. На самом деле, все довольно просто, но в то же время важно, ведь на правильном использовании отношений между классами Java строится ее объектно-ориентированная направленность. Поэтому важно разобраться с отличиями между разными отношениями.

Сегодня в статье мы разберем несколько наиболее важных и часто используемых видов отношений в Java.

Наследование Java

Наследование в Java, как и в других языках программирования, — это способ, используя который можно создать новый класс на основе родительского. Родительский класс — этот тот класс, который ранее уже был создан и имеет собственные свойства и характеристики. Класс-наследник — это новый созданный класс, который наследует от родительского все поля и методы, однако добавляет некое собственное уникальное свойство или характеристику.

Самый простой пример — это описание автомобиля. Представим ситуацию, что вам нужно составить программу, описывающую автопарк. В этом случае нужно будет определить родительский класс «автомобиль», который будет описывать все имеющиеся автомобили. Однако каждый отдельный вид автомобилей будет классом-наследником класса «автомобиль». Например, это могут быть следующие типы автомобилей:

  • «грузовой автомобиль»,

  • «легковой автомобиль»,

  • «микроавтобус»,

  • «автобус»,

  • «спортивный автомобиль»,

  • и др.

Общий класс «автомобиль» будет содержать общие свойства для всех типов авто, а каждый отдельный тип будет содержать свойства, характерные именно этому типу. Например:

  • «год выпуска»,

  • «грузоподъемность»,

  • «вид топлива»,

  • «вместимость пассажиров»,

  • «максимальная скорость»,

  • «разгон до 100 км/ч»,

  • и др.

Говорят, что можно обходиться без родительского класса. Да, можно. Но использование родительского класса помогает существенно сократить объем кода, потому что в родительском классе описываются общие свойства для всех классов-наследников. Если не создавать родительский класс, тогда все общие свойства придется прописывать в каждом классе. А теперь представьте, что у вас десятки классов-наследников и в каждом будут писаться одни и те же строки кода. К примеру, все классы-наследники класса «автомобиль» могут:

  •  заводиться,

  •  разгоняться,

  •  тормозить,

  •  стоять на месте заведенными,

  •  затягивать ручник,

  •  ехать на первой, второй, третьей и др. передаче,

  •  и др.

Все это может быть свойствами, методами и функциями класса. Можно все это описать один раз в родительском классе и больше не повторяться. А если не использовать родительский класс, тогда придется все это раз за разом описывать в каждом отдельном классе.

Наследование Java: реализация в коде

Мы подробно описали словами, что такое наследование в Java. Теперь давайте посмотрим, как такое взаимоотношение выглядит в небольшой программе:

public class AutoCar {

 

private String typeAuto;

private int maxAcceleration;

private int yearOfProduction;

 

public AutoCar(String typeAuto, int maxAcceleration, int yearOfProduction) {

this.typeAuto = typeAuto;

this.maxAcceleration = maxAcceleration;

this.yearOfManufacture = yearProduction;

}



public void accelerate() {

//...описываем ускорение

}

 

public void braking() {

//...описываем торможение

}

}



public class cargoVehicle extends AutoCar {

 

public cargoVehicle(String typeAuto, int maxAcceleration, int yearOfProduction) {

super(typeAuto, maxAcceleration, yearOfProduction);

}

}




public class SportCar extends AutoCar {

public SportCar(String typeAuto, int maxAcceleration, int yearOfProduction) {

super(typeAuto, maxAcceleration, yearOfProduction);

}

}

 

При этом, если нужно, тогда в классах-наследниках возможно написать любые уникальные свойства. С этим нет никаких проблем.

Некоторые пользователи интересуются, каким образом в Java организуется множественное наследование? Никаким. В Java не существует такого понятия, как множественное наследование. Класс-наследник может наследовать свойства только от единственного родительского класса. Напомним, что множественное наследование — это возможность класса-наследника наследовать свойства от нескольких родительских классов. В других объектно-ориентированных языках множественное наследование присутствует, а в Java нет.

Композиция и агрегация в Java

Композиция и агрегация в Java являются составляющей ассоциативных взаимоотношений между классами. Ассоциация подразумевает, что между двумя классами есть некие взаимоотношения. Например:

  •  учитель и ученик,

  •  полицейский и преступник,

  •  банк и деньги,

  •  магазин и товар,

  •  и др.

Это примеры ассоциаций из жизни, но в программировании они появляются точно по таким же правилам. А главное правило — это наличие связи между классами.

Композиция и агрегация в Java показывают «силу» связей между ассоциативными классами. Например:

  1. Агрегация в Java. Это такой вид ассоциации, который указывает нам, что один класс является частью другого. Например, у нас определен класс «микроавтобус» и определен класс «пассажир». Пассажир является частью класса «микроавтобус». Однако взаимосвязь не слишком строгая, потому что один и тот же «пассажир» может быть составляющей разных классов, например: «автобус», «такси», «спортивный автомобиль» и др. Такие «не строгие» ассоциативные связи и называются агрегацией.

  2. Композиция в Java. Это более строгая ассоциативная взаимосвязь, которая показывает, что один класс принадлежит другому классу и не может принадлежать прочим классам. Например, класс «человек» содержит класс «руки». Класс «руки» принадлежит конкретному классу «человек» и не может принадлежать другими классам.

Заключение

Сегодня мы поговорили о таких взаимоотношениях между классами, как наследование, агрегация и композиция в Java. Наиболее ценным отношением является наследование в Java, поэтому на нем мы остановились немного подробнее. Наследование используется довольно часто в ООП, поэтому важно научиться его применять.

Схожие статьи

Как подключить класс в Java, все тонкости импорта класса
JavaScript

Как подключить класс в Java, все тонкости импорта класса

Байт-код Java: определение, инструкции, методы написания и примеры
JavaScript

Байт-код Java: определение, инструкции, методы написания и примеры

Отладка JavaScript в Firefox с помощью Debugger. Подробная инструкция
JavaScript

Отладка JavaScript в Firefox с помощью Debugger. Подробная инструкция

Графический редактор в Java: создание и работа с примерами
JavaScript

Графический редактор в Java: создание и работа с примерами