June 27, 2020

Lesson 2

Java является Объектно-ориентированным языком программирования. Это позволяет создавать классы и объекты и задавать им различное поведение, свойства. Java также поддерживает наследование.

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

Можно представить себе класс Ship(Корабль). Допустим этот класс предоставляет основные свойства одинаковые для всех кораблей. Корабль умеет плавать, умеет поворачивать влево и вправо. Но вдруг у разработчика может появиться задача, создать несколько кораблей разного типа. Первый - военный корабль, второй - рыбацкое судно. Оба они умеют плавать и изменять направление движения, так как унаследовали базовую логику от класса Ship. Но помимо базовой логики каждый из них добавляет что - то свое. Военный корабль умеет стрелять, а рыбацкое судно умеет забрасывать и вытаскивать сети. Базовую логику по хорошему стоит выносить в абстрактный класс. Это класс, который служит для того чтобы хранить базовую логику для всех объектов одного типа с ним. В нашем случае класс Ship целесообразно сделать абстрактным.

Давайте спроектируем небольшую иерархию классов кораблей.

  • Базовый абстрактный класс Ship имеет методы start() - начать движение stop() - остановиться, left() - повернуть налево right() - повернуть направо, а также дополнительно уже реализованный для всех метод sendMessage() который служит для отправки сообщения в диспетчерский пункт управления кораблями.
  • На основе базового класса создадим военный корабль Warship который будет реализовывать эти методы
  • Также на основе базового класса создадим рыбацкое судно, которое аналогично Военному кораблю будет реализовывать эти методы

Код класса Ship.

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

Данный код показывает создание экземпляра класса. Если попробовать создать такой объект на основе Ship, то среда не даст вам этого сделать. Нельзя написать Ship ship = new Ship() без ошибки.

Важно: Для того чтобы наследоваться от какого - нибудь класса в Java существует ключевое слово extends.

Данный код показывает как на основе базовой логики описанной в Ship мы создали военный корабль(Warship) и реализовали у него эти методы.

В методе main мы создаем экземпляр класса и вызываем у него методы реализованные в нем. Вы можете заметить что метод sendMessage не был реализован в классе Warship, но он доступен для вызова. В данном случае я добавил его для того чтобы показать, что абстрактный класс может содержать как сигнатуры методов(т.е метод без реализации), так и методы с реализацией. Также еще один важный нюанс тут это слово protected. Оно является модификатором доступа для переменной или метода. Всего в Java 4 модификатора доступа это public, default, private, protected. Все они задают разную видимость переменных и методов(Но об этом позже).

Задание 1

Создать иерархию классов животных. Например можно взять двух животных. Это кошка и собака. Базовый класс для них будет называться Animal. Подумать что общего умеют делать кошка и собака как разновидность животного. И описать это в ООП стиле.

Дополнительно:

В классах Cat, Dog создать переменную имя с модификатором доступа private

private String name;

и инициализировать ее в конструкторе. А также создать для нее getter, setter методы