Klasy i Obiekty w Javie

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?

  1. 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.
  2. 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.
  3. 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 obiektu Samochod.
  • 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 zmiennej mojSamochod.

Podstawowe operacje na obiektach:

  1. Tworzenie instancji: Używając operatora new tworzymy nowe obiekty.
  2. Dostęp do pól: Możemy odczytywać i modyfikować wartości pól obiektu.
  3. 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.