Итоги — Иерархия сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 27 из 87.
Задание
ЛегкоДавайте создадим полную систему иерархии сотрудников, которая объединит все концепции наследования из этой главы. Вы создадите структуру компании, в которой разные типы сотрудников имеют общие атрибуты, но обладают своим специализированным поведением.
Вы организуете свой код в четырех файлах:
Employee.java: Создайте базовый класс, который является общим для всех сотрудников. У каждого сотрудника есть имя и зарплата. Включите конструктор, который инициализирует оба поля, и методgetDetails(), который возвращает:[name] earns $[salary]. Также добавьте методwork(), который выводит:[name] is working.Manager.java: Создайте класс, который расширяет Employee. У менеджеров есть дополнительное полеteamSize, представляющее количество людей, которыми они руководят. Используйтеsuperдля обработки инициализации родительского класса. Переопределите методwork(), чтобы он выводил:[name] is managing a team of [teamSize]. Добавьте методgetManagerDetails(), который возвращает:Manager: [name] earns $[salary], Team size: [teamSize].Developer.java: Создайте еще один класс, который расширяет Employee. У разработчиков есть полеlanguageдля их специализации в программировании. Снова используйтеsuperдля родительской части. Переопределитеwork(), чтобы метод выводил:[name] is coding in [language]. Добавьте методgetDeveloperDetails(), который возвращает:Developer: [name] earns $[salary], Language: [language].Main.java: Объедините все здесь. Вы получите пять входных данных: имя сотрудника, зарплату, размер команды для менеджера, другое имя и язык программирования для разработчика. Создайте Manager и Developer, затем для каждого из них вызовите их специализированный метод получения деталей, а затем их методwork().
Вы получите пять входных данных в следующем порядке: имя менеджера (String), зарплата менеджера (double), размер команды (int), имя разработчика (String) и язык программирования (String). Используйте зарплату 75000.0 для разработчика.
Форматируйте все значения зарплаты с 2 знаками после запятой, используя String.format("%.2f", salary). Ваш вывод должен содержать всего четыре строки — детали и рабочее поведение менеджера, а затем детали и рабочее поведение разработчика.
Попробуйте сами
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Чтение входных данных
String managerName = scanner.nextLine();
double managerSalary = scanner.nextDouble();
int teamSize = scanner.nextInt();
scanner.nextLine(); // поглощение символа новой строки
String developerName = scanner.nextLine();
String language = scanner.nextLine();
// Зарплата разработчика фиксирована и составляет 75000.0
double developerSalary = 75000.0;
// TODO: Создайте объект Manager с managerName, managerSalary и teamSize
// TODO: Создайте объект Developer с developerName, developerSalary и language
// TODO: Выведите данные менеджера, используя getManagerDetails()
// TODO: Вызовите метод work() менеджера
// TODO: Выведите данные разработчика, используя getDeveloperDetails()
// TODO: Вызовите метод work() разработчика
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»