Třída a objekt

Proč to potřebuji?

Třídy a objekty jsou základním stavebním kamenem objektově orientovaného programování v Javě. Bez pochopení tohoto konceptu nelze efektivně navrhovat ani psát jakýkoliv netriviální program.

Teorie

Třída je šablona (blueprint) pro vytváření objektů. Definuje atributy (data) a metody (chování). Objekt je konkrétní instance třídy vytvořená v paměti pomocí new.

Property (vlastnost) je logická hodnota přístupná zvenčí přes getter/setter. Zapouzdření znamená, že vnitřní stav je skrytý (private) a přístup je řízen metodami.

Instanční proměnná patří konkrétnímu objektu. Třídní (statická) proměnná (static) je sdílená všemi instancemi.

Modifikátory přístupu

ModifikátorTřídaBalíkPodtřídaVšude
privateanonenene
(default)anoanonene
protectedanoanoanone
publicanoanoanoano

Příklady

public class Student {
    // Instanční proměnné (private = zapouzdření)
    private String jmeno;
    private int vek;

    // Třídní (statická) proměnná – sdílená všemi instancemi
    private static int pocetStudentu = 0;

    // Konstruktor
    public Student(String jmeno, int vek) {
        this.jmeno = jmeno;
        this.vek = vek;
        pocetStudentu++;
    }

    // Property – getter
    public String getJmeno() {
        return jmeno;
    }

    // Property – setter s validací
    public void setVek(int vek) {
        if (vek > 0 && vek < 150) {
            this.vek = vek;
        }
    }

    // Třídní (statická) metoda
    public static int getPocetStudentu() {
        return pocetStudentu;
    }

    // Instanční metoda
    public String toString() {
        return jmeno + " (" + vek + " let)";
    }
}

// Použití:
Student s1 = new Student("Jan", 21);  // objekt (instance)
Student s2 = new Student("Eva", 22);
System.out.println(Student.getPocetStudentu()); // 2 – třídní metoda
System.out.println(s1.getJmeno());              // "Jan" – property

Shrnutí

Klíčové body

  • Třída = šablona, objekt = instance vytvořená pomocí new
  • static = třídní úroveň (sdílená), bez static = instanční
  • Zapouzdření: private atributy + public getter/setter
  • 4 úrovně přístupu: private, default, protected, public