Klassenmethoden und Objektmethoden

Im Unterschied zur Klassenmethode muss eine Objektmethode an einem konkret instanziierten Objekt aufgerufen werden, dies ist bei Klassenmethoden nicht der Fall.

Bislang haben wir bei der Definition unserer main-Methoden immer das Schlüsselwort static vorangestellt. Damit erreichen wir, dass eine Klassenmethode angelegt wird. Selbes gilt auch für Attribute durch das Voranstellen von static.

Beispiel

Am Besten schauen wir uns den Unterschied zwischen Klassenmethoden und Objektmethoden an einem konkreten Beispiel an:

public class Auto {

    // Klassenattribute
    static int anzahlRaeder = 4;

    // Objektattribute
    String marke, farbe;
    double verbrauch;

    // Klassenmethode
    static void wieVieleRaeder() {
        System.out.println("Ein Auto hat " + anzahlRaeder + " Räder!");
    }

    // Objektmethoden
    void fahren() {
        System.out.print(this.marke + " fährt, ");
        System.out.println("brumm brumm brumm...");
    }

    // Konstruktor
    public Auto(String marke, String farbe, double verbrauch) {
        this.marke = marke;
        this.farbe = farbe;
        this.verbrauch = verbrauch;
    }

    // Main Methode
    public static void main(String[] args) {

        // Objekte instanziieren
        Auto pkw1 = new Auto("Audi", "schwarz", 5.6);
        Auto pkw2 = new Auto("BMW", "weiß", 6.3);

        // Objektmethoden aufrufen
        pkw1.fahren();
        pkw2.fahren();

        // Klassenmethode aufrufen
        wieVieleRaeder();

    }

}

Wir definieren ein Objekt Auto über die Attribute:

  • Marke
  • Farbe
  • Verbrauch

Diese Attribute können pro Auto mit einem objektspezifischen Wert belegt werden, dies erfolgt mit dem Konstruktor.

Nach der Instanziierung eines Objekts können wir die Objektmethode fahren() an einem konkreten Objekt aufrufen und so über this auch auf die Objektattribute zugreifen.

Audi fährt, brumm brumm brumm...
BMW fährt, brumm brumm brumm...

Die Gesamtheit aller Autos lässt sich über die Anzahl der Räder beschreiben, die Belegung gilt über alle Objekte hinweg. Daher wird anzahlRaeder() als static definiert.

Ein Auto hat 4 Räder!

Aus einer Klassenmethode hat man keinen Zugriff auf Attribute eines Objekts, d.h. this funktioniert nur in Objektmethoden.

Die this-Referenz ist in Klassenmethoden nicht verfügbar.

Mit dem nun gewonnenen Wissen über Objetmethoden können wir die im Beitrag Konstruktor geschriebene Klasse Mitarbeiter vereinfachen. Die Ausgaben auf der Konsole können wir in eine Methode print() verlagern und somit die main-Methode vereinfachen und unseren Code übersichtlicher gestalten. Hierfür muss nur das konkrete Objekt mitarbeiter1 durch die this-Referenz ausgetauscht werden.

public class Mitarbeiter {

    // Attribute
    int personalnummer;
    String name, vorname, abteilung;

    // Objektmethode
    void print() {
        System.out.print("Personalnummer: ");
        System.out.println(this.personalnummer);
        System.out.print("Name: ");
        System.out.println(this.name);
        System.out.print("Vorname: ");
        System.out.println(this.vorname);
        System.out.print("Abteilung: ");
        System.out.println(this.abteilung);
    }

    // Standardkonstruktor
    public Mitarbeiter() { }

    // Eigener Konstruktor
    public Mitarbeiter(int personalnummer, String name, String vorname, String abteilung) {
        this.personalnummer = personalnummer;
        this.name = name;
        this.vorname = vorname;
        this.abteilung = abteilung;
    }

    public static void main(String[] args) {

        // Neuen Mitarbeiter instanziieren
        Mitarbeiter mitarbeiter1 = new Mitarbeiter(123, "Müller", "Hans", "Vertrieb");

        // Ausgabe der Attribute
        mitarbeiter1.print();

    }

}
Personalnummer: 123
Name: Müller
Vorname: Hans
Abteilung: Vertrieb

Die Ausgabe auf der Konsole bleibt unverändert zur bisherigen Implementierung.

Im nächsten Beitrag werden wir mit Getter- und Settermethoden einige Objektmethoden schreiben und verwenden.

Schreibe einen Kommentar