Klasa i obiekt to fundamentalne pojęcia w programowaniu obiektowym, które Java implementuje w bardzo rozbudowany sposób. Klasy definiują szablony dla obiektów, określając jakie dane (stany) i działania (metody) obiekt będzie posiadał. Obiekty są instancjami tych klas, które działają według zdefiniowanych schematów.
Klasa
Klasa w Javie to konstrukcja, która jest używana do tworzenia bardziej złożonych typów danych, łącząc zmienne i metody w jednym miejscu. Klasy są jak przepisy lub plany konstrukcyjne.
Struktura klasy:
- Pola (zmienne): Określają cechy (stan) obiektów danej klasy.
- Metody: Definiują zachowanie (funkcjonalności) obiektów klasy.
- Konstruktory: Specjalne metody wywoływane podczas tworzenia nowych obiektów klasy.
Przykład:
public class Samochod {
// Pola
String marka;
int rokProdukcji;
// Konstruktor
public Samochod(String marka, int rokProdukcji) {
this.marka = marka;
this.rokProdukcji = rokProdukcji;
}
// Metoda
public void wyswietlInformacje() {
System.out.println("Marka: " + marka + ", Rok produkcji: " + rokProdukcji);
}
}
Obiekt
Obiekt to konkretna instancja klasy. Po zdefiniowaniu klasy możemy tworzyć jej obiekty, które będą miały stan określony przez wartości pól oraz zachowanie określone przez metody klasy.
Tworzenie i używanie obiektu:
public class Main {
public static void main(String[] args) {
// Tworzenie obiektu
Samochod mojSamochod = new Samochod("Toyota", 2020);
// Wywoływanie metody obiektu
mojSamochod.wyswietlInformacje();
}
}
Operator new
w Javie pełni kluczową rolę w procesie tworzenia obiektów. Jest to jeden z podstawowych operatorów języka Java, używany do alokacji pamięci dla nowych obiektów klasy oraz do inicjowania ich stanu poprzez wywołanie konstruktora klasy.
Co dokładnie robi operator new
?
- Alokacja pamięci: Operator
new
przydziela pamięć w stercie (heap) dla nowego obiektu. Sterta to obszar pamięci zarządzany przez automatyczną obsługę śmieci (garbage collector), który jest odpowiedzialny za przydzielanie i zwalnianie pamięci. - Inicjalizacja obiektu: Po alokacji pamięci
new
automatycznie wywołuje konstruktor klasy, aby zainicjować nowy obiekt. Konstruktor to specjalna metoda w klasie, która jest wywoływana, gdy obiekt jest tworzony. Może on przyjmować argumenty, które pozwalają na ustawienie początkowego stanu obiektu. - Zwracanie referencji: Po utworzeniu obiektu, operator
new
zwraca referencję do niego. Referencja ta jest używana do interakcji z obiektem, takich jak wywoływanie metod i dostęp do pól obiektu.
Przykład użycia operatora new
Rozważmy klasę Samochod
, która ma dwa pola: marka
i rokProdukcji
, oraz konstruktor umożliwiający inicjalizację tych pól.
public class Samochod {
String marka;
int rokProdukcji;
public Samochod(String marka, int rokProdukcji) {
this.marka = marka;
this.rokProdukcji = rokProdukcji;
}
}
Tworzenie nowego obiektu klasy Samochod
wyglądałoby następująco:
Samochod mojSamochod = new Samochod("Toyota", 2020);
W tym przypadku:
- Operator
new
alokuje pamięć dla nowego obiektuSamochod
. - Wywoływany jest konstruktor
Samochod(String marka, int rokProdukcji)
, przekazując mu wartości „Toyota” i 2020. - Konstruktor inicjalizuje pola obiektu tymi wartościami.
- Referencja do nowo utworzonego obiektu
Samochod
jest przypisana do zmiennejmojSamochod
.
Podstawowe operacje na obiektach:
- Tworzenie instancji: Używając operatora
new
tworzymy nowe obiekty. - Dostęp do pól: Możemy odczytywać i modyfikować wartości pól obiektu.
- Wywoływanie metod: Możemy wywoływać metody obiektu, aby wykonać określone operacje.
Zaawansowane aspekty:
- Dziedziczenie: Klasy mogą dziedziczyć z innych klas, przejmując ich pola i metody.
- Polimorfizm: Obiekty różnych klas mogą być traktowane jako instancje tej samej klasy nadrzędnej lub interfejsu.
- Hermetyzacja: Możliwość ukrycia szczegółów implementacji klasy i eksponowanie tylko potrzebnych do interakcji z obiektem elementów.