Zachowania polimorficzne
Wykorzystają Państwo polimorfizm do wyświetlania, sortowania i agregowania mieszanych kształtów. Algorytmy pozostaną niewielkie i łatwe do odczytania na urządzeniach mobilnych.
Zachowania polimorficzne to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 3 z 3. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 3 lekcji w sumie.
Przegląd
Zachowania polimorficzne pozwalają traktować wszystkie kształty w taki sam sposób, podczas gdy każdy z nich wykonuje własne obliczenia. Wykonamy: (1) jednolite wyświetlanie listy różnych kształtów, (2) sortowanie według area oraz (3) obliczanie sum za pomocą jednej pętli.
Lista kontrolna bazowego API
Base API zawiera operacje używane w całym kodzie:
- area() i perimeter() — muszą zostać zaimplementowane przez każdy kształt.
- Opcjonalna niewielka metoda pomocnicza, taka jak label() lub info(), ułatwiająca czytelne wyświetlanie.
- Pola należy przechowywać wewnątrz konkretnych kształtów.
Kod: jednolite wyświetlanie
Jednolite wyświetlanie: pętla korzysta wyłącznie z API Shape. Każdy obiekt wykonuje własną implementację obliczeń.
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String label() { return getClass().getSimpleName(); }
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double r; Circle(double r) { this.r = (r < 0) ? 0 : r; }
double area() { return Math.PI * r * r; }
double perimeter() { return 2 * Math.PI * r; }
}
static class Rectangle extends Shape {
double w, h; Rectangle(double w, double h) { this.w = Math.max(0, w); this.h = Math.max(0, h); }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
}
public static void main(String[] args) {
Shape[] list = { new Circle(2.0), new Rectangle(3.0, 4.0), new Circle(1.0) };
for (int i = 0; i < list.length; i = i + 1) {
Shape s = list[i];
System.out.println(s.label() + " -> " + s.info());
}
}
}
Pomysł na sortowanie według pola
Pomysł na sortowanie:
- Porównanie: porównaj wartości area() dwóch kształtów.
- W przypadku niewielkiej ilości danych wystarczy proste sortowanie bąbelkowe/przez wybieranie.
- Używaj wyłącznie metod Shape; nie sprawdzaj typów.
Kod: sortowanie według pola
Proste sortowanie: wymaga tylko wywołania area(). Nie ma tu sprawdzania typów — to właśnie siła polimorfizmu.
public class Main {
static abstract class Shape { abstract double area(); abstract double perimeter(); String label(){ return getClass().getSimpleName(); } }
static class Circle extends Shape { double r; Circle(double r){ this.r = Math.max(0, r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }
// Very small bubble sort for beginners (ascending by area)
static void sortByArea(Shape[] arr){
for(int pass=0; pass<arr.length-1; pass=pass+1){
for(int i=0; i<arr.length-1; i=i+1){
if(arr[i].area() > arr[i+1].area()){
Shape tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp;
}
}
}
}
public static void main(String[] args) {
Shape[] a = { new Rectangle(3,4), new Circle(2), new Circle(1) };
sortByArea(a);
for(int i=0;i<a.length;i=i+1){
System.out.println(a[i].label() + " area=" + String.format("%.2f", a[i].area()));
}
}
}
Kod: suma pól
Obliczanie sumy: w jednej pętli dodajemy wyniki wywołań area(). Każdy element wykonuje własne obliczenia, dzięki czemu kod pozostaje prosty.
public class Main {
static abstract class Shape { abstract double area(); abstract double perimeter(); }
static class Circle extends Shape { double r; Circle(double r){ this.r=Math.max(0,r);} double area(){return Math.PI*r*r;} double perimeter(){return 2*Math.PI*r;} }
static class Rectangle extends Shape { double w,h; Rectangle(double w,double h){ this.w=Math.max(0,w); this.h=Math.max(0,h);} double area(){return w*h;} double perimeter(){return 2*(w+h);} }
static double totalArea(Shape[] arr){
double sum = 0.0;
for(int i=0;i<arr.length;i=i+1){
sum = sum + arr[i].area(); // polymorphic call
}
return sum;
}
public static void main(String[] args) {
Shape[] list = { new Circle(1), new Rectangle(2,3), new Circle(0.5) };
System.out.println("Total area = " + String.format("%.2f", totalArea(list)));
}
}
Sprawdzian dotyczący stylu polimorficznego
Szybkie sprawdzenie: Który styl kodu najlepiej wykorzystuje tutaj polimorfizm?
Podsumowanie
Podsumowanie: Pisaliśmy kod z użyciem tego samego API, a każdy kształt generował własny wynik. Operacje takie jak wyświetlanie, sortowanie i sumowanie działały dzięki kodowi obsługującemu jeden typ.
Często zadawane pytania
Czy lekcja „Zachowania polimorficzne” jest bezpłatna?
Tak — pełny tekst „Zachowania polimorficzne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 3 lekcji w sumie.
Co nauczysz się w „Zachowania polimorficzne”?
Wykorzystają Państwo polimorfizm do wyświetlania, sortowania i agregowania mieszanych kształtów. Algorytmy pozostaną niewielkie i łatwe do odczytania na urządzeniach mobilnych. Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 3.
Ile czasu zajmuje lekcja „Zachowania polimorficzne”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Projektowanie
- Implementacja
- Zachowania polimorficzne