Klasy abstrakcyjne są kluczowym elementem programowania obiektowego w Java. Nie można utworzyć instancji klasy abstrakcyjnej bezpośrednio, ale służą one jako szablony dla klas pochodnych. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne (bez implementacji) oraz metody z implementacją. Metody abstrakcyjne muszą być zaimplementowane przez klasy dziedziczące. Klasy abstrakcyjne są wykorzystywane do definiowania wspólnych cech i funkcjonalności dla grupy powiązanych klas.
Przykład użycia klasy abstrakcyjnej
W tym przykładzie zdefiniujemy klasę abstrakcyjną Shape
, która będzie reprezentować ogólną ideę kształtu, oraz kilka konkretnych klas kształtów, takich jak Circle
i Rectangle
, które dziedziczą po Shape
.
Klasa abstrakcyjna Shape
// Definicja klasy abstrakcyjnej Shape
public abstract class Shape {
// Metoda abstrakcyjna do obliczania pola
public abstract double area();
// Metoda abstrakcyjna do obliczania obwodu
public abstract double perimeter();
}
Klasa Circle
// Klasa Circle dziedzicząca po Shape
public class Circle extends Shape {
private double radius;
// Konstruktor klasy Circle
public Circle(double radius) {
this.radius = radius;
}
// Implementacja metody area dla koła
@Override
public double area() {
return Math.PI * radius * radius;
}
// Implementacja metody perimeter dla koła
@Override
public double perimeter() {
return 2 * Math.PI * radius;
}
}
Klasa Rectangle
// Klasa Rectangle dziedzicząca po Shape
public class Rectangle extends Shape {
private double width;
private double height;
// Konstruktor klasy Rectangle
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
// Implementacja metody area dla prostokąta
@Override
public double area() {
return width * height;
}
// Implementacja metody perimeter dla prostokąta
@Override
public double perimeter() {
return 2 * (width + height);
}
}
Użycie klas
// Główna klasa do demonstracji użycia kształtów
public class ShapeDemo {
public static void main(String[] args) {
Shape circle = new Circle(5);
Shape rectangle = new Rectangle(4, 5);
System.out.println("Pole koła: " + circle.area());
System.out.println("Obwód koła: " + circle.perimeter());
System.out.println("Pole prostokąta: " + rectangle.area());
System.out.println("Obwód prostokąta: " + rectangle.perimeter());
}
}
Podsumowanie
Klasy abstrakcyjne w Java umożliwiają tworzenie hierarchii klas, w których niektóre funkcjonalności są zdefiniowane na poziomie bazowym, ale ich konkretna implementacja jest pozostawiona klasom pochodnym. Użycie klas abstrakcyjnych pozwala na zwiększenie modularności i ponownego wykorzystania kodu, jednocześnie wymuszając na klasach dziedziczących implementację określonych metod. W naszym przykładzie, klasa abstrakcyjna Shape
definiuje ogólny szablon dla kształtów, a konkretne klasy jak Circle
i Rectangle
implementują te szablony, dostarczając szczegółowe obliczenia dla różnych typów kształtów.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Java w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.