Klasy abstrakcyjne w Java to mechanizm umożliwiający tworzenie klas, które nie mogą być bezpośrednio instancjonowane. Służą one jako szablon dla klas pochodnych, wymuszając implementację określonych metod. Klasy abstrakcyjne często stosuje się w celu zapewnienia wspólnej struktury dla grupy powiązanych klas, zachowując jednocześnie możliwość implementacji unikalnych zachowań. Przyjrzymy się praktycznemu zastosowaniu klas abstrakcyjnych na przykładzie prostego systemu zarządzania pracownikami.
Przykład kodu: System zarządzania pracownikami
// Definicja abstrakcyjnej klasy Pracownik
abstract class Employee {
protected String name;
protected double salary;
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
// Metoda abstrakcyjna do obliczania wynagrodzenia
public abstract double calculateSalary();
// Metoda do wyświetlania informacji o pracowniku
public void displayInfo() {
System.out.println("Pracownik: " + name + ", Wynagrodzenie: " + calculateSalary());
}
}
// Klasa pochodna dla Pracowników na stałe
class PermanentEmployee extends Employee {
public PermanentEmployee(String name, double salary) {
super(name, salary);
}
// Implementacja metody obliczania wynagrodzenia
@Override
public double calculateSalary() {
return salary; // Dla pracowników na stałe wynagrodzenie jest stałe
}
}
// Klasa pochodna dla Pracowników kontraktowych
class ContractEmployee extends Employee {
private double hourlyRate;
private int hoursWorked;
public ContractEmployee(String name, double hourlyRate, int hoursWorked) {
super(name, 0);
this.hourlyRate = hourlyRate;
this.hoursWorked = hoursWorked;
}
// Implementacja metody obliczania wynagrodzenia
@Override
public double calculateSalary() {
return hourlyRate * hoursWorked; // Wynagrodzenie = stawka godzinowa * liczba godzin
}
}
// Klasa główna z metodą main
public class EmployeeManagementSystem {
public static void main(String[] args) {
PermanentEmployee pe = new PermanentEmployee("Jan Kowalski", 5000);
ContractEmployee ce = new ContractEmployee("Anna Nowak", 100, 160);
pe.displayInfo(); // Wyświetla informacje o pracowniku stałym
ce.displayInfo(); // Wyświetla informacje o pracowniku kontraktowym
}
}
Wyjaśnienie kodu
- Klasa
Employee
: Jest to abstrakcyjna klasa bazowa dla wszystkich typów pracowników. Zawiera wspólne pola takie jakname
isalary
, konstruktor do inicjalizacji tych pól, abstrakcyjną metodęcalculateSalary()
wymuszającą implementację w klasach pochodnych oraz metodędisplayInfo()
do wyświetlania informacji o pracowniku. - Klasy
PermanentEmployee
iContractEmployee
: Są to konkretne implementacje klasyEmployee
, reprezentujące odpowiednio pracowników na stałe i kontraktowych. Każda z tych klas implementuje metodęcalculateSalary()
na swój unikalny sposób, zgodnie z różnymi modelami wynagrodzeń. - Klasa
EmployeeManagementSystem
z metodąmain
: Służy do demonstracji działania systemu. Tworzy obiekty obu typów pracowników i wyświetla ich informacje, demonstrując polimorfizm i użycie klas abstrakcyjnych.
Podsumowanie
Klasy abstrakcyjne w Java umożliwiają tworzenie elastycznych i łatwych do rozszerzenia hierarchii klas. Dzięki abstrakcji, programiści mogą zdefiniować wspólny interfejs dla grupy klas, jednocześnie pozostawiając szczegóły implementacji poszczególnym klasom pochodnym. Jak pokazuje przykład systemu zarządzania pracownikami, klasy abstrakcyjne świetnie sprawdzają się w modelowaniu hierarchii obiektów, gdzie różne obiekty mają wspólne cechy, ale różnią się szczegółami implementacji.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Java od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.