Podsumowanie – hierarchia pracowników
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 27 z 87.
Wyzwanie
ŁatwyZbudujmy kompletny system hierarchii pracowników, który łączy wszystkie pojęcia związane z dziedziczeniem z tego rozdziału. Utworzysz strukturę firmy, w której różne typy pracowników mają wspólne atrybuty, ale też własne, wyspecjalizowane zachowania.
Rozmieścisz swój kod w czterech plikach:
Employee.java: Utwórz klasę bazową wspólną dla wszystkich pracowników. Każdy pracownik ma imię i wynagrodzenie. Dodaj konstruktor, który inicjalizuje oba pola, oraz metodęgetDetails(), która zwraca:[name] earns $[salary]. Dodaj też metodęwork(), która wypisuje:[name] is working.Manager.java: Utwórz klasę dziedziczącą po Employee. Menedżerowie mają dodatkowe poleteamSize, określające liczbę osób, którymi zarządzają. Użyjsuper, aby obsłużyć inicjalizację klasy nadrzędnej. Nadpisz metodęwork(), aby wypisywała:[name] is managing a team of [teamSize]. Dodaj metodęgetManagerDetails(), która zwraca:Manager: [name] earns $[salary], Team size: [teamSize].Developer.java: Utwórz kolejną klasę dziedziczącą po Employee. Deweloperzy mają polelanguageokreślające ich specjalizację programistyczną. Ponownie użyjsuperdo obsługi części dotyczącej klasy nadrzędnej. Nadpisz metodęwork(), aby wypisywała:[name] is coding in [language]. Dodaj metodęgetDeveloperDetails(), która zwraca:Developer: [name] earns $[salary], Language: [language].Main.java: Połącz tutaj wszystkie elementy. Otrzymasz pięć danych wejściowych: imię pracownika, wynagrodzenie, wielkość zespołu menedżera, kolejne imię oraz język programowania dewelopera. Utwórz obiekt Manager i obiekt Developer, a następnie dla każdego z nich wywołaj najpierw jego wyspecjalizowaną metodę zwracającą szczegóły, a potem metodęwork().
Otrzymasz pięć danych wejściowych w następującej kolejności: imię menedżera (String), wynagrodzenie menedżera (double), wielkość zespołu (int), imię dewelopera (String) oraz język programowania (String). Ustaw wynagrodzenie dewelopera na 75000.0.
Formatuj wszystkie wartości wynagrodzenia do 2 miejsc po przecinku za pomocą String.format("%.2f", salary). Wynik powinien składać się łącznie z czterech wierszy — szczegółów menedżera i informacji o jego pracy, a następnie szczegółów dewelopera i informacji o jego pracy.
Spróbuj swoich sił
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Wczytaj dane wejściowe
String managerName = scanner.nextLine();
double managerSalary = scanner.nextDouble();
int teamSize = scanner.nextInt();
scanner.nextLine(); // pobierz znak nowej linii
String developerName = scanner.nextLine();
String language = scanner.nextLine();
// Wynagrodzenie programisty jest ustalone na 75000.0
double developerSalary = 75000.0;
// TODO: Utwórz obiekt Manager z managerName, managerSalary i teamSize
// TODO: Utwórz obiekt Developer z developerName, developerSalary i language
// TODO: Wyświetl szczegóły menedżera za pomocą getManagerDetails()
// TODO: Wywołaj metodę work() menedżera
// TODO: Wyświetl szczegóły programisty za pomocą getDeveloperDetails()
// TODO: Wywołaj metodę work() programisty
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online