0Pricing
Java Academy · Lekcja

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

  1. Projektowanie
  2. Implementacja
  3. Zachowania polimorficzne
← Powrót do Java Academy