Klasy abstrakcyjne w Java

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 jak name i salary, 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 i ContractEmployee: Są to konkretne implementacje klasy Employee, 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.

Scroll to Top