Junior
Jakie są typy klas w Java?
sobes.tech AI
Odpowiedź od AI
W Javie istnieją następujące główne typy klas:
-
Klasa standardowa (Standard Class)
- Może zawierać pola, metody, konstruktory.
- Może być dziedziczona przez inne klasy, jeśli nie jest zadeklarowana jako
final. - Może implementować interfejsy.
- Deklarowana z modyfikatorami dostępu (
public,protected,default,private).
-
Klasa abstrakcyjna (Abstract Class)
- Deklarowana słowem kluczowym
abstract. - Nie można jej bezpośrednio zainicjować.
- Może zawierać metody abstrakcyjne (bez implementacji) i zwykłe metody.
- Przeznaczona do dziedziczenia; podklasy muszą zapewnić implementację metod abstrakcyjnych.
// Klasa abstrakcyjna dla figury abstract class Shape { abstract double area(); // Metoda abstrakcyjna obliczająca pole void display() { // Metoda zwykła System.out.println("This is a shape."); } } - Deklarowana słowem kluczowym
-
Klasa final (Final Class)
- Deklarowana słowem kluczowym
final. - Nie może być dziedziczona przez inne klasy.
- Używana do zapobiegania rozszerzaniu klasy, zapewnienia bezpieczeństwa lub niezmienności implementacji.
// Klasa final, której nie można dziedziczyć final class ImmutableString { private final String value; public ImmutableString(String value) { this.value = value; } public String getValue() { return value; } } - Deklarowana słowem kluczowym
-
Wyliczenia (Enum)
- Specjalny typ klasy, przeznaczony do reprezentowania stałego zestawu stałych.
- Deklaruje się słowem kluczowym
enum. - Stałe wyliczenia domyślnie są
public static final. - Mogą mieć pola, metody i konstruktory (z modyfikatorem
private).
// Wyliczenie dni tygodnia enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } -
Klasy anonimowe (Anonymous Class)
- Klasa bez nazwy, tworzona i instancjonowana jednocześnie.
- Często używana do implementacji interfejsów lub rozszerzania klas "na żywo", gdy potrzebne jest jednorazowe użycie.
- Nie mogą mieć jawnych konstruktorów.
// Tworzenie klasy anonimowej implementującej Runnable Runnable r = new Runnable() { @Override public void run() { System.out.println("Running in an anonymous class."); } }; -
Klasy zagnieżdżone (Nested Class)
- Klasy zadeklarowane wewnątrz innej klasy.
- Istnieją dwa typy:
- Statyczne klasy zagnieżdżone (Static Nested Class): deklarowane słowem kluczowym
static. Nie mają bezpośredniego dostępu do nie-statycznych członków klasy zewnętrznej. Tworzone jak zwykłe klasy. - Klasy wewnętrzne (Inner Class): nie są zadeklarowane jako
static. Mają dostęp do wszystkich członków klasy zewnętrznej, w tymprivate. Wymagają instancji klasy zewnętrznej do utworzenia własnej instancji.
- Statyczne klasy zagnieżdżone (Static Nested Class): deklarowane słowem kluczowym
// Klasa zewnętrzna class OuterClass { private String outerField = "Outer"; // Klasa statyczna zagnieżdżona static class StaticNestedClass { void display() { System.out.println("Inside StaticNestedClass."); // Brak bezpośredniego dostępu do outerField } } // Klasa wewnętrzna class InnerClass { void display() { System.out.println("Inside InnerClass. outerField: " + outerField); // Dostęp do outerField } } } -
Klasy rekordowe (Record - od Java 14)
- Deklaruje się słowem kluczowym
record. - Przeznaczone do przechowywania danych. Kompilator automatycznie generuje konstruktor, metody dostępu do pól (
accessor methods),equals(),hashCode()itoString(). - Pola rekordu są domyślnie
final.
// Rekord reprezentujący punkt w przestrzeni 2D record Point(int x, int y) { // Kompilator wygeneruje konstruktor, metody x(), y(), equals(), hashCode(), toString() } - Deklaruje się słowem kluczowym