Вы находитесь на странице: 1из 3

Лабораторная работа №4

Задание 1
В этом задании вы модифицируете архитектуру системы с использованием статических методов.

В настоящее время для представления банка используется экземпляр класса, который содержит
набор клиентов. При таком дизайне потенциально возможно создание нескольких экземпляров
класса Банк, в каждом из которых будет свой набор клиентов. Эта ситуация потенциально опасна.

Для решения проблемы класс Банк должен быть преобразован в класс-утилиту (Utility class).
Класс-утилита содержит только статические методы и его экземпляр не создается. На рисунке
изображен новый вид класса Банк.

1. Откройте проект banking


2. Модифицируйте класс Bank:
a. Измените все поля класса на статические
b. Переместите инициализацию полей класса из конструктора в блок объявления
полей либо в блок static
c. Преобразуйте все методы класса в статические
3. Протестируйте работу модифицированного класса Bank

Задание 2
В этом задании вы ознакомитесь с использованием абстрактных классов и интерфейсов.

Вы создадите иерархию классов животных, представленную на рисунке. В корне иерархии


находится абстрактный класс Animal. Некоторые из животных явлются домашними – реализуют
интерфейс Pet.
1. Создайте новый проект animals
2. Создайте абстрактный класс Animal
a. Создайте в классе Animal поле legs (количество ног) с типом доступа protected.
Создайте конструктор с параметром для инициализации данного поля
b. Создайте абстрактный метод eat()
c. Создайте метод walk(), выводящий на экран строку «Это животное ходит на n
ногах», где n – значение поля legs
3. Создайте класс Spider (паук), являющийся наследником класса Animal
a. Создайте конструктор без параметров, инициализирующий пауков восемью
ногами посредством вызова конструктора родительского класса с
соответствующим параметром
b. Реализуйте метод eat(), выводящий на экран строку «Паук ест мух»
4. Создайте интерфейс Pet (домашнее животное). Определите в нем указанные на
диаграмме классов методы
5. Создайте класс Cat (кот), наследующий от класса Animal и реализующий интерфейс Pet
a. В классе Cat создайте поле name (кличка). Создайте конструктор с параметром типа
String, позволяющим задавать кличку кота. Создайте конструктор без параметров,
определяющий безымянного кота. Количество ног у кота – 4.
b. Реализуйте унаследованные от интерфейса Pet методы getName() и setName() для
возврата и задания клички кота
c. Реализуйте унаследованный от интерфейса Pet метод play(), выводящий на экран
строку “Кот name играет с клубком”, где name – значение поля name
d. Реализуйте унаследованный от класса Animal метод eat(), выводящий на экран
строку «Кот ест мышей»
6. Создайте класс Fish (рыба), наследующий от класса Animal и реализующий интерфейс Pet
a. В классе Fish создайте поле name (кличка). Создайте конструктор без параметров,
определяющий рыбу с количеством ног, равным 0
b. Реализуйте методы интерфейса Pet. Метод play() должен выводить строку «Рыба
плавает в аквариуме»
c. Переопределите метод walk(), унаследованный от класса Animal. Метод должен
выводить строку «Рыбы не умеют ходить, они плавают»
d. Реализуйте унаследованный от класса Animal метод eat(), выводящий на экран
строку "Рыба ест корм»
7. Реализуйте тестовый класс, демонстрирующий полиморфный вызов методов различных
классов:
Pet f = new Fish();
Pet c = new Cat("Васька");
Animal [] animals = new Animal[3];
// использование различных реализаций интерфейса
f.play();
c.play();
// Вызов виртуальных методов
animals[0] = new Fish();
animals[1] = new Cat(“Барсик”);
animals[2] = new Spider();
for (int i=0; i<2; i++) {
animals[i].eat();
animals[i].walk();
}