Rückblick – Formrechner
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 33 von 87.
Aufgabe
EinfachLass uns einen Formrechner erstellen, der alle Polymorphie-Konzepte zusammenführt, die du in diesem Kapitel gelernt hast. Du erstellst eine abstrakte Shape-Klasse mit konkreten Unterklassen und verwendest anschließend Polymorphie, um Flächeninhalte einheitlich zu berechnen und anzuzeigen.
Du wirst deinen Code auf vier Dateien verteilen:
Shape.java: Erstelle eine abstrakte Klasse, die als Grundlage für alle Formen dient. Jede Form besitzt einname-Feld (String). Füge einen Konstruktor hinzu, um es zu initialisieren, eine Getter-MethodegetName()und eine abstrakte MethodegetArea(), die einen double-Wert zurückgibt. Füge außerdem eine Methodedescribe()hinzu, die Folgendes zurückgibt:[name]: [area](wobei area mithilfe vonString.format("%.2f", getArea())auf 2 Dezimalstellen formatiert wird).Circle.java: Erstelle eine konkrete Klasse, die Shape erweitert. Kreise besitzen einradius-Feld (double). Verwendesuper, um "Circle" als Namen zu übergeben. ImplementieregetArea(), sodass die Fläche mithilfe vonMath.PI * radius * radiuszurückgegeben wird.Rectangle.java: Erstelle eine weitere konkrete Klasse, die Shape erweitert. Rechtecke besitzen die Felderwidthundheight(beide double). Übergebe "Rectangle" als Namen an den Konstruktor der übergeordneten Klasse. ImplementieregetArea(), sodass width multipliziert mit height zurückgegeben wird.Main.java: Erstelle einen Formrechner, der Polymorphie in Aktion demonstriert. Du erhältst drei Eingaben: einen Radius für den Kreis, eine Breite und eine Höhe für das Rechteck.Erstelle einen Circle und ein Rectangle und speichere sie anschließend in einem Array aus
Shape-Referenzen. Durchlaufe das Array und gib für jede Form ihre Beschreibung mithilfe der Methodedescribe()aus.Berechne nach der Schleife den Gesamtflächeninhalt aller Formen und gib ihn im folgenden Format aus:
Total area: [sum](ebenfalls auf 2 Dezimalstellen formatiert). Verwende eine separate Schleife oder einen Akkumulator, um die Flächeninhalte zu summieren, indem dugetArea()für jede Formenreferenz aufrufst.
Du erhältst drei Eingaben: den Radius des Kreises (double), die Breite des Rechtecks (double) und die Höhe des Rechtecks (double).
Deine Ausgabe sollte drei Zeilen enthalten – eine Beschreibung für jede Form, gefolgt vom Gesamtflächeninhalt. Beachte, wie du verschiedene Formen über den abstrakten Typ Shape einheitlich behandeln kannst, während jede Form ihren Flächeninhalt auf ihre eigene Weise berechnet!
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Eingaben lesen
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Erstelle ein Circle-Objekt unter Verwendung von radius
// TODO: Erstelle ein Rectangle-Objekt unter Verwendung von width und height
// TODO: Erstelle ein Array von Shape-Referenzen und speichere beide Formen darin
// TODO: Durchlaufe das Array und gib die Beschreibung jeder Form mit describe() aus
// TODO: Berechne die Gesamtfläche aller Formen
// Verwende eine Schleife oder einen Akkumulator, um die Flächen durch Aufrufen von getArea() für jede Form zu summieren
// TODO: Gib die Gesamtfläche im Format "Total area: [sum]" aus
// Verwende String.format("%.2f", totalArea) für die Formatierung
}
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort thisMethodenFelder (Attribute)KonstruktormethodeÜberladen von KonstruktorenRückblick – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbung (extends)Das Schlüsselwort superÜberschreiben von Methoden (@Override)KonstruktorverkettungDie Object-KlasseEinfach- und mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenRückblick – Mitarbeiterhierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-SchnittstelleRückblick – Benutzerdefinierte Sortierung2Zugriffsmodifikatoren & Kapselung
Übersicht der ZugriffsebenenGetter- und Setter-MethodenInformationsverbergungDas Schlüsselwort finalRückblick – Bankkontoverwaltung5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, verschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Versiegelte Klassen (Java 17+)11Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBuilder-MusterObserver-MusterStrategie-Muster14Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungsdienst3Klassen-Props & statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Wiederholung – Counter & Utility6Schnittstellen & abstrakte Klassen
Einführung in InterfacesInterfaces implementierenMehrere Interfaces implementierenDefault & Static in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesRückblick – ZahlungssystemÜbe selbstständig: Online-Java-Compiler