Powtórka — kalkulator figur
Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 33 z 87.
Wyzwanie
ŁatwyZbudujesz kalkulator figur, który łączy wszystkie koncepcje polimorfizmu poznane w tym rozdziale. Utworzysz abstrakcyjną klasę Shape z konkretnymi podklasami, a następnie użyjesz polimorfizmu, aby obliczać i wyświetlać pola powierzchni w jednolity sposób.
Rozmieścisz kod w czterech plikach:
Shape.java: Utwórz klasę abstrakcyjną, która będzie podstawą dla wszystkich figur. Każda figura ma polename(String). Dodaj konstruktor, który je zainicjuje, metodę pobierającągetName()oraz metodę abstrakcyjnągetArea(), która zwraca wartość typu double. Dodaj też metodędescribe(), która zwraca:[name]: [area](gdzie pole powierzchni jest sformatowane do 2 miejsc po przecinku za pomocąString.format("%.2f", getArea())).Circle.java: Utwórz konkretną klasę rozszerzającą Shape. Koła mają poleradius(double). Użyjsuper, aby przekazać "Circle" jako nazwę. ZaimplementujgetArea(), aby zwracała pole powierzchni obliczone za pomocąMath.PI * radius * radius.Rectangle.java: Utwórz kolejną konkretną klasę rozszerzającą Shape. Prostokąty mają polawidthiheight(oba typu double). Przekaż "Rectangle" jako nazwę do konstruktora klasy nadrzędnej. ZaimplementujgetArea(), aby zwracała iloczyn width i height.Main.java: Zbuduj kalkulator figur, który pokaże polimorfizm w działaniu. Otrzymasz trzy dane wejściowe: promień koła, szerokość i wysokość prostokąta.Utwórz koło i prostokąt, a następnie zapisz je w tablicy referencji typu
Shape. Przejdź pętlą przez tablicę i dla każdej figury wypisz jej opis za pomocą metodydescribe().Po zakończeniu pętli oblicz i wypisz łączne pole powierzchni wszystkich figur w formacie:
Total area: [sum](również sformatowane do 2 miejsc po przecinku). Użyj osobnej pętli lub akumulatora, aby zsumować pola powierzchni, wywołującgetArea()dla każdej referencji do figury.
Otrzymasz trzy dane wejściowe: promień koła (double), szerokość prostokąta (double) i wysokość prostokąta (double).
Wynik powinien zawierać trzy wiersze — opis każdej figury, a po nim łączne pole powierzchni. Zwróć uwagę, że możesz traktować różne figury w jednolity sposób za pomocą abstrakcyjnego typu Shape, podczas gdy każda figura oblicza swoje pole powierzchni na swój własny sposób!
Spróbuj swoich sił
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Wczytaj dane wejściowe
double radius = scanner.nextDouble();
double width = scanner.nextDouble();
double height = scanner.nextDouble();
// TODO: Utwórz obiekt Circle, używając radius
// TODO: Utwórz obiekt Rectangle, używając width i height
// TODO: Utwórz tablicę referencji do Shape i umieść w niej oba obiekty
// TODO: Przejdź przez tablicę i wypisz opis każdego obiektu, używając describe()
// TODO: Oblicz łączne pole wszystkich figur
// Użyj pętli lub akumulatora, aby zsumować pola, wywołując getArea() dla każdej figury
// TODO: Wypisz łączne pole w formacie: "Total area: [sum]"
// Użyj String.format("%.2f", totalArea) do formatowania
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe thisMetodyPola (atrybuty)Metoda konstruktoraPrzeciążanie konstruktoraPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawy dziedziczenia (extends)Słowo kluczowe superPrzesłanianie metod (@Override)Łańcuch wywołań konstruktorówKlasa ObjectDziedziczenie jedno- i wielopoziomoweDlaczego Java nie obsługuje wielodziedziczenia klasPodsumowanie – hierarchia pracowników7Metody specjalne i klasa Object
Metoda toString()equals() i hashCode()Metoda clone()compareTo() i ComparableInterfejs ComparatorPodsumowanie — własne sortowanie10Obsługa wyjątków w programowaniu obiektowym
Hierarchia klas wyjątkówWłasne wyjątkiBłędy sprawdzane a niesprawdzaneWzorzec try-with-resourcesPodsumowanie – zweryfikowany użytkownik2Modyfikatory dostępu i enkapsulacja
Przegląd poziomów dostępuMetody pobierające i ustawiająceUkrywanie informacjiSłowo kluczowe finalPodsumowanie — menedżer kont bankowych5Polimorfizm
Podstawy przeciążania metodPrzesłanianie metod (w czasie wykonywania)Rzutowanie w górę i w dółOperator instanceofKlasy i metody abstrakcyjnePowtórka — kalkulator figur8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieAgregacja a kompozycjaKlasy wewnętrzne, zagnieżdżone i anonimoweEnumy i metody enumówRekordy (Java 16+)Klasy zapieczętowane (Java 17+)11Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec BuilderWzorzec ObserverWzorzec Strategy3Właściwości klas i składowe statyczne
Zmienne instancji a zmienne statyczneMetody statyczneBloki statyczneStałe (static final)Powtórka – Counter i Utility6Interfejsy i klasy abstrakcyjne
Wprowadzenie do interfejsówImplementowanie interfejsówImplementacja wielu interfejsówMetody domyślne i statyczne w interfejsieKlasy abstrakcyjne a interfejsyInterfejsy funkcyjnePodsumowanie — system płatnościPoćwicz samodzielnie: Kompilator Java online