Content
Was ist eine Klasse?
- Eine Klasse definiert einen eigenen Datentyp
- Sie dient als Vorlage für Instanzen die von Ihr erstellt werden können
- Sie dient der Kapselung von Funktionalität
- Sie enthält Methoden und Attribute (Eigenschaften)
Definition einer Klasse
public class Human {
public static final double M_TO_FEET_FACTOR = 3.28084; //Final Schlüsselwort verhindert das verändern der Variable
private String name;
public Human(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public static float convertMToFeet(float meters) {
return meters * M_TO_FEET_FACTOR;
}
}
...deklaration der Klasse Human
- Instanzvariable: name
- Klassenvariable: M_TO_FEET_FACTOR
- Konstruktor: Human(String name)
- Instanzmethoden: getName(), setName(String name)
- Klassenmethode: convertMToFeet
Was ist eine Instanz?
- Die Klasse ist eine Vorlage für Instanzen die daraus erstellt werden können.
- Um aus einer Klasse eine Instanz zu erstellen wird das Schlüsselwort new verwendet
new Human("Alfons");
...erstellt eine neue Instanz von Human
- Es ist nicht zwingend nötigt dass von jeder Klasse eine Instanz erstellt werden kann
public Util {
private Util() {
}
public static int add(int a, int b) {
return a + b;
}
}
...der Konstruktor der Klasse Util hat die Sichtbarkeit private, das heißt niemand außer der Klasse selbst kann den Konstruktor aufrufen
Bestandteile einer Klasse
Klassenname
Der Name der Klasse muss exakt dem Dateinamen (ohne .java Endung) entsprechen
Konstruktor
- Eine Klasse hat immer einen Konstruktor (Sie kann auch einen leeren Konstruktor haben, dieser muss dann nicht explizit geschrieben werden)
- Der Konstruktor hat den selben Namen wie die Klasse selbst
- Es kann auch mehrere Konstruktor geben
- Ein Konstruktor einer Klasse kann andere Konstruktoren der Klasse aufrufen this(...)
- Ein Konstruktor muss den Konstruktor der Superklasse aufrufen super(...)
- Handelt es sich beim Konstruktor der Superklasse nur um den Standard Konstruktor ohne Parameter so muss nicht super() aufgerufen werden
Methoden
Eine (nicht abstrakte) Klasse kann 2 verschiedene Arten von Methoden enthalten:
Instanzmethoden
Diese existieren nur in der Instanz einer Klasse. Das heißt, es muss zuerst eine Instanz der Klasse erstellt worden sein um diese Methoden aufzurufen.
Human human = new Human("Alfons");
System.out.println(human.getName());
Klassenmethoden
Diese Methoden enthalten das Schlüsselwort static. Um sie aufzurufen wird keine Instanz der Klasse benötigt.
System.out.println(Human.convertMToFeet(1.8));
Attribute (Eigenschaften) von Klassen
Attribute sind Variablen die im Kontext einer Klasse existieren.
Es gibt zwei verschiedene Typen von Variablen:
Instanzvariablen
Dies Variablen existien nur in Instanzen der Klasse.
public Human2 {
public String name;
public Human2(String name) {
this.name = name;
}
public static void main(String[] args) {
System.out.println(new Human2("Rambina").name);
}
}
...direkter Zugriff auf eine Instanzvariable
Klassenvariablen
Dies Variablen existien nur in der Klasse, jedoch nicht in Instanzen. Sie gibt es nur einmal pro Klasse.
System.out.println(Human.M_TO_FEET_FACTOR);
...aufruf der statischen Variable M__TO__FEET_FACTOR