Java OOP
Da du jetzt die Java Grundlagen kennst, tauchen wir tiefer in die objektorientierte Programmierung (OOP) von Java ein.
In deinem ersten Java-Code hast du wahrscheinlich Hello World
auf der Konsole ausgegeben. Lass uns anschauen, was hier passiert ist:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
In den Java Grundlagen haben wir gelernt, dass main
eine spezielle Java Methode ist – sie ist der Code-STARTER. Egal wie groß das Programm ist, der Compiler sucht immer zuerst nach main
. Dir ist bereits bekannt, dass Code in einer Java Klasse abläuft, in diesem Fall HelloWorld
.
Aber was passiert, wenn wir eine Klasse ohne main
-Methode erstellen?
public class SayHelloWorld {
public String getGreeting() {
return "Hello, World!";
}
}
Diese Java Klasse lässt sich nicht direkt ausführen, da sie keine main
-Methode hat. ABER wir können SayHelloWorld
in HelloWorld
importieren, dort als Java Objekt instanziieren und in der main
-Methode verwenden:
public class HelloWorld {
public static void main(String[] args) {
SayHelloWorld hello = new SayHelloWorld();
System.out.println(hello.getGreeting());
}
}
Java OOP bedeutet im Grunde, mit verschiedenen Java Klassen zu arbeiten und diese zu verknüpfen, um Probleme zu lösen. Es gibt natürlich noch viele weitere Details, aber das ist die Basis von Java OOP.
Bevor wir weiterlernen, werfen wir einen Blick auf Java Static.
Hier ist derselbe Code wie oben, aber getGreeting
ist jetzt static:
public class SayHelloWorld {
public static String getGreeting() {
return "Hello, World!";
}
}
public class HelloWorld {
public static void main(String[] args) {
System.out.println(SayHelloWorld.getGreeting());
}
}
Jetzt erhalten wir dieselbe Ausgabe, ohne ein Java Objekt erstellen zu müssen.
Java Objekt oder Java Static?
Ob du in Java eine Instanz eines Objekts oder eine
static
-Methode verwenden solltest, hängt davon ab, wie die Methode auf Daten zugreift und wie flexibel der Code sein muss. Schauen wir uns an, wann was zu bevorzugen ist:
Wann verwende ich ein Java Objekt?
Ein Objekt ermöglicht dir, Daten individuell für jede Instanz zu speichern. Das ist ideal, wenn die Methode oder der Zustand der Klasse auf ein spezifisches Objekt bezogen ist.
Beispiel:
- Ein Konto-Objekt, das Informationen wie
kontostand
,kontoinhaber
, undkontoNummer
speichert. Da jeder Kontoinhaber eigene Daten hat, ist eine Instanz sinnvoll.
public class Konto {
private double kontostand;
public Konto(double startKontostand) {
this.kontostand = startKontostand;
}
public double getKontostand() {
return this.kontostand;
}
}
Hier können wir mehrere Konto
-Objekte mit unterschiedlichem Kontostand erstellen.
Wann verwende ich eine Java Static Methode?
static
-Methoden sind nützlich, wenn die Methode keine spezifischen Daten einer Instanz benötigt, sondern allgemeine Berechnungen oder logische Prozesse durchführt. Sie lassen sich direkt über die Klasse aufrufen, ohne dass ein Objekt erstellt werden muss.
Beispiel:
- Ein
Math
-Helper für allgemeine Berechnungen wieaddieren
odersubtrahieren
. Da diese unabhängig von einem spezifischen Objekt sind, können siestatic
sein.
public class MathHelper {
public static int add(int a, int b) {
return a + b;
}
}
Entscheidungshilfe
- Objektmethode (Instanzmethode): Verwende sie, wenn auf Daten oder Methoden einer spezifischen Instanz zugegriffen wird oder diese benötigt werden.
- Static Methode: Verwende sie, wenn keine Instanzdaten erforderlich sind und die Methode universell einsetzbar ist.
Einfach gesagt: Wenn der Code sich auf ein spezifisches Objekt bezieht, nutze ein Java Objekt. Wenn der Code für alle Objekte gleich ist, verwende Java Static.
Klassenarten
Basis
Dies ist eine Standardklasse in Java. Ein Objekt wurde in einer anderen Datei erstellt, in die Main-Klasse importiert, und ein Objekt wird erstellt, mit dem wir arbeiten können.
Natürlich gibt es unendlich viele Möglichkeiten, wie man das anpassen kann. Am besten sollten wir die Variablen mit Zugriffsmodifikator auf private setzen.
class Auto {
// Attribute
public String brand;
public double speed;
public String plate;
// Konstruktor
public Auto(String brand, double speed, String plate) {
this.brand = brand;
this.speed = speed;
this.plate = plate;
}
// Methode zum Fahren
public void drive() {
System.out.println(brand + " fährt mit " + speed + " km/h.");
}
// Methode zum Anhalten
public void stop() {
speed = 0;
System.out.println(brand + " hat angehalten.");
}
}
public class Main {
public static void main(String[] args) {
// Erstellen eines Auto-Objekts und Aufruf der Methoden
Auto meinAuto = new Auto("BMW", 120.5, "AB-1234");
meinAuto.drive();
meinAuto.stop();
}
}
Gleiche BSP aber mit Java Static
class Auto {
// Statische Methode zum Fahren
public static void drive(String brand, double speed) {
System.out.println(brand + " fährt mit " + speed + " km/h.");
}
// Statische Methode zum Anhalten
public static void stop(String brand) {
System.out.println(brand + " hat angehalten.");
}
}
public class Main {
public static void main(String[] args) {
// Aufruf der statischen Methoden ohne ein Objekt zu erstellen
Auto.drive("BMW", 120.5);
Auto.stop("BMW");
}
}
Java Vererbung
Eine Java Klasse wird erstellt (Parent-Klasse), und alle anderen Java Klassen (Child-Klassen) werden von dieser abgeleitet, in denen die Java klassen die Java Methoden und Java Variablen bei sich kopieren.
class Animal {
void fly() {
System.out.println("This animal cannot fly.");
}
void run() {
System.out.println("This animal cannot run.");
}
void swim() {
System.out.println("This animal cannot swim.");
}
}
class Duck extends Animal {
@Override
void fly() {
System.out.println("The duck flies in the sky.");
}
@Override
void swim() {
System.out.println("The duck swims in the pond.");
}
}
class Dog extends Animal {
@Override
void run() {
System.out.println("The dog runs quickly in the park.");
}
}
class Fish extends Animal {
@Override
void swim() {
System.out.println("The fish swims in the water.");
}
}
public class Main {
public static void main(String[] args) {
Animal duck = new Duck();
duck.fly(); // Output: The duck flies in the sky.
duck.run(); // Output: The duck waddles along the shore.
duck.swim(); // Output: The duck swims in the pond.
Animal dog = new Dog();
dog.run(); // Output: The dog runs quickly in the park.
dog.fly(); // Output: This animal cannot fly.
dog.swim(); // Output: This animal cannot swim.
Animal fish = new Fish();
fish.swim(); // Output: The fish swims in the water.
fish.fly(); // Output: This animal cannot fly.
fish.run(); // Output: This animal cannot run.
}
}