Третий урок из курса Java для тестировщиков, который я провожу в компании, где я работаю. Курс учит базовому программированию на языке Java, объясняет основные понятия, знакомит с наиболее популярными библиотеками и средствами, которые могут пригодиться тестировщикам. Курс расчитан на слушателей, которые слабо подготовлены в программировании.
Программа курса доступна здесь: http://goo.gl/8iCNb
В этом уроке рассматриваются следующие вопросы:
- ООП
- Объекты и классы
- Модификаторы доступа
- Поля класса
@TheLexass shape это не объект, это только ссылка на него.
Shape[] shape = new Shape[3];
shape[0] = new Circle();
shape[1] = new Square();
shape[2] = new Rectangle();
у каждого потомка переопределён метод draw().
for(int i = 0; i < shape.length; i++) { shape[i].draw();
}
во время компиляции (на лету) происходит позднее связывание. По типу объекта в массиве, компилятор знает для какого метода нужно вызвать метод draw();
hazartilirot 1 month ago
@TheLexass Сформулируйте свой вопрос. Поток получает от суперкласса поведение (все методы). Если Вам нужно, чтобы поток как-то по своему выполнял метод то, делается переопределение нужного метода.
Shape shape = new Triangle();
shape.draw()
есть такое правило, переменная суперкласса, может ссылаться как на объект суперкласса, так и на его потомков. Это называется неявное восходящее преобразование. Но в общем, это полиморфизм, т.к. метод draw() будет выполняться для каждого потомка по своему.
hazartilirot 1 month ago
не пойму, как в суперклассе можно вызывать методы подклассов, если суперкласс по-определению ничего не знает о своих наследниках и есть ли они вообще у него?
TheLexass 1 month ago
модификатор package? Отсутствие модификатора означает доступ в пределах пакета. :)
package - это создание пакета. :) Добавили бы информационные субтитры. :)
hazartilirot 2 months ago in playlist Java для тестировщиков
Инкапсуляция. Существуют разработчики класса и программисты-клиенты. Одни создают класс, другие ими пользуются. Первые должны максимально скрыть реализацию класса и оставить для программистов-клиентов только интерфейс (методы).
Это похоже на производителя часов и потребителя. Производитель часов максимально скрывает от потребителя механизм работы часов, оставляя только ушко (интерфейс), чтобы настроить часы.
hazartilirot 2 months ago in playlist Java для тестировщиков
Полиморфизм - это работа с неизвестными классами при условии, что они были унаследованы от известного базового класса.
Вы как разработчик собственного класса не должны знать сколько раз и какие классы унаследовали Ваш класс. Вы знаете только то, что в Вашем базовом классе есть методы, которые используются в потомках, но каждый потомок, если в нём был переопределён этот метод, будет выполнять действие по указанным условиям.
hazartilirot 2 months ago in playlist Java для тестировщиков
Полиморфизм. Я создал класс Employee в котором создал метод fire и отдал класс коллегам. Они унаследовали мой класс и, один создал класс Manager, другой создал класс Cleaner. Каждый переопределил метод fire - увольнение с разными условиями. Директор приказал уволить всех рабочих. Я обращаюсь к базовому классу Employee и даю действие fire уволить всех. Менеджеры получают при увольнении 1000 баксов (переопределённый метод), а уборщики билет в Магадан (переопределённый метод).
hazartilirot 2 months ago in playlist Java для тестировщиков
Полиморфизм. Я создаю класс ChessMan, создаю метод move(). Отдаю свой класс коллегам. Каждый программист наследует мой класс и создаёт свою фигуру. Один пишет класс Queen, другой Knight и т.д. каждая фигура переопределяет мой метод move() по своему, т.к. каждая фигура в шахматах имеет уникальный ход.
Я не должен знать сколько раз наследовали мой класс, какие существуют фигуры, как они умеют ходить. Я даю общую команду move() и каждая фигура, которая наследовала мой класс ходит по своему.
hazartilirot 2 months ago in playlist Java для тестировщиков
30:00-37:30 Автора унесло... вынос мозга.
hazartilirot 2 months ago in playlist Java для тестировщиков
@19:00-19:30 Ничего не понял. Что дублируем и кому обращаемся? Может быть автор имел ввиду, что нужно использовать композицию (has -содержит)? Т.е. механизм создания нового класса из объектов существующих классов?
Без сарказма, я хочу лишь понять и исправить, если это необходимо. :)
hazartilirot 2 months ago in playlist Java для тестировщиков