Zusammenfassung – Formenrechner
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 33 von 87.
Aufgabe
EinfachLassen Sie uns einen Formenkalkulator erstellen, der alle Polymorphismus-Konzepte zusammenführt, die Sie in diesem Kapitel gelernt haben. Sie werden eine abstrakte Klasse Shape mit konkreten Unterklassen erstellen und dann Polymorphismus verwenden, um Flächen einheitlich zu berechnen und anzuzeigen.
Sie werden Ihren Code über vier Dateien organisieren:
Shape.java: Erstellen Sie eine abstrakte Klasse, die als Grundlage für alle Formen dient. Jede Form hat ein Feldname(String). Fügen Sie einen Konstruktor zur Initialisierung, eine Getter-MethodegetName()und eine abstrakte MethodegetArea()hinzu, die einen double-Wert zurückgibt. Fügen Sie außerdem eine Methodedescribe()hinzu, die Folgendes zurückgibt:[name]: [area](wobei die Fläche mitString.format("%.2f", getArea())auf 2 Dezimalstellen formatiert ist).Circle.java: Erstellen Sie eine konkrete Klasse, die Shape erweitert. Kreise haben ein Feldradius(double). Verwenden Siesuper, um "Circle" als Namen zu übergeben. Implementieren SiegetArea(), um die Fläche mitMath.PI * radius * radiuszurückzugeben.Rectangle.java: Erstellen Sie eine weitere konkrete Klasse, die Shape erweitert. Rechtecke haben die Felderwidthundheight(beide double). Übergeben Sie "Rectangle" als Namen an den Eltern-Konstruktor. Implementieren SiegetArea(), um die Breite multipliziert mit der Höhe zurückzugeben.Main.java: Erstellen Sie einen Formenkalkulator, der Polymorphismus in Aktion demonstriert. Sie erhalten drei Eingaben: einen Radius für den Kreis, eine Breite und eine Höhe für das Rechteck.Erstellen Sie einen Circle und ein Rectangle und speichern Sie diese in einem Array von
Shape-Referenzen. Durchlaufen Sie das Array in einer Schleife und geben Sie für jede Form deren Beschreibung mit der Methodedescribe()aus.Berechnen und geben Sie nach der Schleife die Gesamtfläche aller Formen im Format
Total area: [sum]aus (ebenfalls auf 2 Dezimalstellen formatiert). Verwenden Sie eine separate Schleife oder einen Akkumulator, um die Flächen zu summieren, indem SiegetArea()für jede Formenreferenz aufrufen.
Sie erhalten drei Eingaben: den Radius des Kreises (double), die Breite des Rechtecks (double) und die Höhe des Rechtecks (double).
Ihre Ausgabe sollte drei Zeilen enthalten - eine Beschreibung für jede Form, gefolgt von der Gesamtfläche. Beachten Sie, wie Sie verschiedene Formen einheitlich über den abstrakten Typ Shape behandeln können, während jede Form ihre Fläche 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 this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem