Implementacja
Przekształcą Państwo projekt w działający kod: zdefiniują klasę bazową, zaimplementują konkretne kształty i wyświetlą wyniki z mieszanej listy.
Implementacja to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 2 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.
Podsumowanie planu
Zaimplementujemy bazową klasę Shape z metodami area() i perimeter(), a następnie dodamy Circle i Rectangle. Nazwy powinny być krótkie, a obliczenia czytelne; do wyświetlania warto używać niewielkich metod pomocniczych.
Kod: klasa bazowa i Circle
Klasa bazowa definiuje API i niewielką metodę pomocniczą info(). Circle implementuje obliczenia oraz toString() na potrzeby czytelnego wyświetlania.
public class Main {
// Base class with a tiny print helper
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() {
return String.format("area=%.2f, per=%.2f", area(), perimeter());
}
}
static class Circle extends Shape {
double radius;
Circle(double r) {
// simple guard to avoid negative sizes for beginners
radius = (r < 0) ? 0 : r;
}
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
public String toString() { return "Circle " + info(); }
}
public static void main(String[] args) {
Shape s = new Circle(2.5);
System.out.println(s); // prints Circle area/perimeter
}
}
Konstruktory i zabezpieczenia
Konstruktory ustawiają wartości pól. Na potrzeby nauki należy zabezpieczyć kod przed ujemnymi wartościami wejściowymi, ograniczając je do zera. W rzeczywistych aplikacjach stosuje się walidację lub wyjątki, ale tutaj zachowujemy prostotę.
Kod: dodawanie Rectangle
Rectangle dołącza do hierarchii i korzysta z tego samego API. Należy zauważyć, że oba kształty można wyświetlać za pomocą tego samego kodu, ponieważ klasa bazowa definiuje kontrakt.
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = (r < 0) ? 0 : r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
public String toString() { return "Circle " + info(); }
}
static class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) {
this.w = (w < 0) ? 0 : w;
this.h = (h < 0) ? 0 : h;
}
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
public String toString() { return "Rectangle " + info(); }
}
public static void main(String[] args) {
Shape a = new Circle(3.0);
Shape b = new Rectangle(4.0, 2.0);
System.out.println(a);
System.out.println(b);
}
}
Listy i wyświetlanie
Lista Shape pozwala łączyć obiekty Circle i Rectangle. Prosta pętla może wyświetlić każdy element. W wynikach na urządzeniach mobilnych należy umieszczać jeden kształt w każdym wierszu i formatować liczby do dwóch miejsc po przecinku.
Kod: mały raport
Raport: niewielka pętla wyświetla typ i podsumowanie każdego kształtu. Polimorfizm zapewnia przejrzystość pętli, a każdy kształt dostarcza własne obliczenia.
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 radius;
Circle(double r) { radius = (r < 0) ? 0 : r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
}
static class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) { this.w = (w < 0) ? 0 : w; this.h = (h < 0) ? 0 : h; }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
}
public static void main(String[] args) {
Shape[] shapes = { new Circle(1.2), new Rectangle(2.0, 3.0), new Circle(0.5) };
for (int i = 0; i < shapes.length; i = i + 1) {
Shape s = shapes[i];
System.out.println(s.label() + " -> " + s.info());
}
}
}
Sprawdzian dotyczący implementacji
Szybkie sprawdzenie: Co jest wymagane dla każdego konkretnego kształtu w tej hierarchii?
Podsumowanie
Podsumowanie: Zaimplementowaliśmy Shape, Circle i Rectangle, dodaliśmy proste zabezpieczenia oraz wyświetliliśmy mały raport z listy zawierającej różne kształty. W następnej lekcji: zachowania polimorficzne, takie jak sortowanie według pola.
Często zadawane pytania
Czy lekcja „Implementacja” jest bezpłatna?
Tak — pełny tekst „Implementacja” 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 „Implementacja”?
Przekształcą Państwo projekt w działający kod: zdefiniują klasę bazową, zaimplementują konkretne kształty i wyświetlą wyniki z mieszanej listy. Ć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 2 z 3.
Ile czasu zajmuje lekcja „Implementacja”?
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