Note
|
Для каждого созданного класса, нужно создать тестовые классы, которые тестирую работу ВСЕХ конструкторов и методов. |
Warning
|
ТОЛЬКО тестовые классы могут содержать вывод в Standard Output (консольный вывод). |
Note
|
В процессе разработки код постоянно модифицируется (удаляется, добавляется, изменяется). |
Note
|
При разработке иерархии держать в уме принцип инкапсуляции, выбирать корректные имена классов и методов, пользоваться преимуществами полиморфизма. |
Note
|
Отдавайте предпочтение интерфейсам, а не абстрактным классам. |
-
Создать класс
Cat
. -
Создать Fields:
-
name
– кличка кота
-
-
Создать Constructors:
-
Cat(name)
-
-
Создать Methods:
-
mew()
– кот мяукает (т.е возвращает "текст" мяуканья) -
purr()
– кот мурлычет (т.е возвращает "текст" мурчания) -
getName()
– получить кличку кота -
setName(name)
– задать кличку кота
-
-
Создать классы
Siamese
,Persian
,Sphynx
наследуемые от классаCat
. -
Переопределить в них methods:
-
mew()
– кот мяукает (каждый по разному) -
purr()
– кот мурлычет (каждый по разному)
-
-
Создать класс
Person
. -
Создать Fields:
-
happiness
- количество счастья у человека (в процентах)
-
-
Создать Constructors:
-
Person(happiness)
- принимает количество счастья
-
-
Создать Methods:
-
changeHappiness(percentHappiness)
- изменение счастья наpercentHappiness
(может быть как положительное, так и отрицательное) -
getHappiness()
- получить количество счастья -
setHappiness(happiness)
- задать количество счастья
-
Перегрузить в классе Cat
методы:
-
mew(Person)
- кот мяукает дляUser
, вызывает у него методchangeHappiness(percentHappiness)
, гдеpercentHappiness
отрицательное число -
purr(Person)
- кот мурлычет дляUser
, вызывает у него методchangeHappiness(percentHappiness)
, гдеpercentHappiness
положительное число
-
Создать класс
Hero
, представляющий собой героя и содержащий полеname
. -
Добавить конструктор, принимающий
name
героя и getter дляname
(setter не нужен). -
Добавить метод
attackEnemy()
, выводящий в Standard Output сообщение о том, что герой атакует врага (это временное решение).
-
Создать классы
Warrior
,Mag
иArcher
, представляющие собой наследников классаHero
. -
Переопределить в них метод
attackEnemy()
для вывода специализированного для этого класса сообщения об атаке.
-
Создать класс
Enemy
, представляющий собой врага и содержащий полеhealth
(количество здоровья). -
Добавить конструктор, принимающий
health
, а также setter и getter. -
Добавить метод
takeDamage(int damage)
, который уменьшаетhealth
в соответствии с полученнымdamage
. -
Переписать метод
attackEnemy()
классаHero
, добавив ему параметр типаEnemy
. -
Метод должен вызывать у врага метод
takeDamage()
и передавать в него определённое количествоdamage
. -
Переопределить метод в подклассах
Warrior
,Mag
иArcher
так, чтобы наносимыйdamage
был разный.
-
Создать интерфейс
Mortal
, содержащий методisAlive()
. -
Сделать так, чтобы класс
Enemy
реализовывал интерфейсMortal
. -
Определить метод
isAlive()
в классеEnemy
, чтобы тот возвращалtrue
, если количество здоровья врага больше0
.
-
Добавить герою показатель здоровья и возможность погибнуть.
-
Добавить возможность врагу атаковать героя в ответ.
-
Создать несколько видов врагов (наследников класса
Enemy
) с разными способностями. Например,Zombie
имеет шанс воскреснуть при гибели. -
Дать героям уникальные способности.
Создать иерархию классов, описывающих геометрические фигуры на плоскости.
-
В иерархии должно быть не менее 10 классов/интерфейсов и хотя бы 2 уровня вложенности.
-
При переопределении методов обязательно использовать аннотацию
@Override
. -
Продемонстрировать переопределение методов в иерархии.
-
Продемонстрировать добавление собственных методов в классах-наследниках (можно с помощью интерфейсов). Например, расчёт диагонали в прямоугольнике, расчёт высоты в треугольнике.
-
Не создавать лишних классов в системе (полностью дублирующих или не содержащих назначения).
-
Каждый класс должен выполнять своё назначение.
-
Создать общие методы:
-
Рассчитывающий площадь фигуры.
-
Принимающий в качестве параметра фигуру и определяющий, равны ли площади текущей и полученной фигуры.
-
-
Создать класс
ShapeUtils
со статическими методами:-
Определяющим, является ли фигура прямоугольником.
-
Определяющим, является ли фигура треугольником.
-
-
Для каждого неабстрактного класса переопределить метод
toString()
класса для представления информации о классах в строковой форме.