import java.util.
ArrayList;
// Abstrakte Klasse Fahrzeug mit allgemeinen Attributen und Methoden
abstract class Fahrzeug {
protected int geschwindigkeit; // Geschwindigkeit in km/h
protected boolean gestartet; // Status, ob das Fahrzeug gestartet ist
public Fahrzeug() {
this.geschwindigkeit = 0;
this.gestartet = false;
}
// Methode, um das Fahrzeug zu starten
public void starten() {
if (!gestartet) {
gestartet = true;
System.out.println(getClass().getSimpleName() + " wurde
gestartet.");
} else {
System.out.println(getClass().getSimpleName() + " läuft
bereits.");
}
}
// Methode, um das Fahrzeug auszuschalten
public void ausschalten() {
if (gestartet && geschwindigkeit == 0) {
gestartet = false;
System.out.println(getClass().getSimpleName() + " wurde
ausgeschaltet.");
} else {
System.out.println(getClass().getSimpleName() + " kann nicht
ausgeschaltet werden, während es in Bewegung ist.");
}
}
// Methode, um das Fahrzeug zu beschleunigen
public void beschleunigen() {
if (gestartet) {
geschwindigkeit++;
System.out.println(getClass().getSimpleName() + " beschleunigt.
Geschwindigkeit: " + geschwindigkeit + " km/h");
} else {
System.out.println(getClass().getSimpleName() + " muss zuerst
gestartet werden.");
}
}
// Methode, um das Fahrzeug zu bremsen
public void bremsen() {
if (geschwindigkeit > 0) {
geschwindigkeit--;
System.out.println(getClass().getSimpleName() + " bremst.
Geschwindigkeit: " + geschwindigkeit + " km/h");
} else {
System.out.println(getClass().getSimpleName() + " steht
bereits.");
}
}
// Methode, um das Fahrzeug zum Stillstand zu bringen
public void anhalten() {
geschwindigkeit = 0;
System.out.println(getClass().getSimpleName() + " wurde zum
Stillstand gebracht.");
}
// Abstrakte Methode, die in den abgeleiteten Klassen überschrieben
werden muss
public abstract void statusAnzeigen();
}
// Klasse EAuto mit spezifischen Attributen
class EAuto extends Fahrzeug {
private int batteriekapazitaet; // in kWh
private int ladezeit; // in Stunden
private int maximaleReichweite; // in km
public EAuto(int batteriekapazitaet, int ladezeit, int
maximaleReichweite) {
super();
this.batteriekapazitaet = batteriekapazitaet;
this.ladezeit = ladezeit;
this.maximaleReichweite = maximaleReichweite;
}
@Override
public void statusAnzeigen() {
System.out.println("EAuto - Batteriekapazität: " +
batteriekapazitaet + " kWh, Ladezeit: " + ladezeit + " Stunden, Reichweite:
" + maximaleReichweite + " km, Geschwindigkeit: " + geschwindigkeit + "
km/h, Gestartet: " + gestartet);
}
}
// Klasse Verbrenner mit spezifischen Attributen
class Verbrenner extends Fahrzeug {
private String kraftstofftyp; // z.B. Benzin, Diesel
private int tankgroesse; // in Litern
private int kraftstoffverbrauch; // in L/100km
public Verbrenner(String kraftstofftyp, int tankgroesse, int
kraftstoffverbrauch) {
super();
this.kraftstofftyp = kraftstofftyp;
this.tankgroesse = tankgroesse;
this.kraftstoffverbrauch = kraftstoffverbrauch;
}
@Override
public void statusAnzeigen() {
System.out.println("Verbrenner - Kraftstofftyp: " + kraftstofftyp +
", Tankgröße: " + tankgroesse + " L, Verbrauch: " + kraftstoffverbrauch + "
L/100km, Geschwindigkeit: " + geschwindigkeit + " km/h, Gestartet: " +
gestartet);
}
}
// Klasse Fahrrad mit spezifischen Attributen
class Fahrrad extends Fahrzeug {
private int gaenge; // Anzahl der Gänge
private String radtyp; // z.B. Mountainbike, Rennrad
private int groesseZoll; // Radgröße in Zoll
public Fahrrad(int gaenge, String radtyp, int groesseZoll) {
super();
this.gaenge = gaenge;
this.radtyp = radtyp;
this.groesseZoll = groesseZoll;
}
@Override
public void statusAnzeigen() {
System.out.println("Fahrrad - Gänge: " + gaenge + ", Radtyp: " +
radtyp + ", Größe: " + groesseZoll + " Zoll, Geschwindigkeit: " +
geschwindigkeit + " km/h, Gestartet: " + gestartet);
}
}
// Testklasse mit der main()-Methode
public class FahrzeugTest {
public static void main(String[] args) {
// ArrayList zum Speichern von verschiedenen Fahrzeugen
ArrayList<Fahrzeug> fahrzeuge = new ArrayList<>();
// Erstellen von Fahrzeugobjekten
fahrzeuge.add(new EAuto(75, 8, 400)); // E-Auto
fahrzeuge.add(new EAuto(90, 6, 500)); // E-Auto
fahrzeuge.add(new Verbrenner("Benzin", 60, 8)); // Verbrenner
fahrzeuge.add(new Verbrenner("Diesel", 70, 6)); // Verbrenner
fahrzeuge.add(new Fahrrad(18, "Mountainbike", 27)); // Fahrrad
fahrzeuge.add(new Fahrrad(21, "Rennrad", 28)); // Fahrrad
// Statusanzeige für alle Fahrzeuge
for (Fahrzeug fahrzeug : fahrzeuge) {
fahrzeug.statusAnzeigen();
}
// Simulation einiger Aktionen
fahrzeuge.get(0).starten(); // EAuto starten
fahrzeuge.get(0).beschleunigen(); // EAuto beschleunigen
fahrzeuge.get(0).bremsen(); // EAuto bremsen
fahrzeuge.get(0).anhalten(); // EAuto anhalten
fahrzeuge.get(0).ausschalten(); // EAuto ausschalten
// Statusanzeige nach Aktionen
for (Fahrzeug fahrzeug : fahrzeuge) {
fahrzeug.statusAnzeigen();
}
}
}
Erklärung des Programms:
Schritt 1: Klassenstruktur und Attribute
1. Oberklasse Fahrzeug:
o Diese Klasse enthält allgemeine Attribute wie geschwindigkeit und
gestartet (Status, ob das Fahrzeug gestartet ist).
o Es gibt Methoden zum Starten, Ausschalten, Beschleunigen, Bremsen und
Anhalten des Fahrzeugs.
o Die Methode statusAnzeigen() ist abstrakt und wird in den spezifischen
Fahrzeugklassen implementiert.
2. Klasse EAuto:
o Diese Klasse erbt von Fahrzeug und fügt spezifische Attribute für ein
Elektroauto hinzu: batteriekapazitaet, ladezeit und
maximaleReichweite.
o Die Methode statusAnzeigen() gibt den aktuellen Status des E-Autos aus.
3. Klasse Verbrenner:
o Diese Klasse erbt ebenfalls von Fahrzeug und hat spezifische Attribute:
kraftstofftyp, tankgroesse und kraftstoffverbrauch.
o Die Methode statusAnzeigen() gibt den aktuellen Status des Verbrenners
aus.
4. Klasse Fahrrad:
o Diese Klasse erbt von Fahrzeug und hat spezifische Attribute für ein Fahrrad:
gaenge, radtyp und groesseZoll.
o Die Methode statusAnzeigen() gibt den aktuellen Status des Fahrrads aus.
Schritt 2: Methoden
Alle Fahrzeuge haben Methoden zum Starten, Ausschalten, Beschleunigen, Bremsen
und Anhalten.
Diese Methoden sind in der Klasse Fahrzeug implementiert und werden von allen
spezifischen Fahrzeugklassen geerbt.
Der Status jedes Fahrzeugs wird durch die Methode statusAnzeigen() angezeigt,
die in jeder abgeleiteten Klasse implementiert wird.
Schritt 3: Klassenverwendung
In der Testklasse FahrzeugTest wird eine ArrayList<Fahrzeug> erstellt, die
verschiedene Fahrzeuge speichert (E-Autos, Verbrenner, Fahrräder).
Die Methode statusAnzeigen() wird für jedes Fahrzeug aufgerufen, um den Status
auszugeben.
Zusätzlich werden einige Aktionen wie Starten, Beschleunigen, Bremsen und
Anhalten auf einem E-Auto simuliert, und der Status wird danach erneut angezeigt.
Beispielausführung:
yaml