0Pricing
Java Academy · Lezione

Comportamenti polimorfici

Utilizzare il polimorfismo per stampare, ordinare e aggregare forme miste. Mantenere gli algoritmi piccoli e facili da leggere su dispositivi mobili.

Comportamenti polimorfici è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 3 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 3 lezioni in totale.

Panoramica

Comportamenti polimorfici consentono di trattare tutte le forme allo stesso modo, mentre ciascuna esegue i propri calcoli. Faremo quanto segue: (1) stampare uniformemente un elenco misto, (2) ordinare per area e (3) calcolare i totali con un unico ciclo.

Checklist dell'API di base

API di base mantiene le operazioni usate ovunque:

  • area() e perimeter() — devono essere implementati da ogni forma.
  • Un piccolo helper facoltativo, come label() o info(), per una stampa ordinata.
  • Mantenete i campi all'interno delle forme concrete.

Codice: stampa uniforme

Stampa uniforme: il ciclo usa solo l'API di Shape. Ogni oggetto esegue la propria implementazione dei calcoli.

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());
    }
  }
}

Ordinamento per area (idea)

Idea dell'ordinamento:

  • Confronto: confrontare i valori di area() di due forme.
  • Per dati di piccole dimensioni, è sufficiente un semplice ordinamento bubble/selection.
  • Usare solo i metodi di Shape; nessun controllo del tipo.

Codice: ordinamento per area

Ordinamento semplice: richiede solo la chiamata a area(). Nessun controllo del tipo: è questa la forza del polimorfismo.

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()));
    }
  }
}

Codice: area totale

Calcolo del totale: in un unico ciclo si sommano le chiamate a area(). Ogni elemento esegue il proprio calcolo; il codice resta semplice.

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)));
  }
}

Verifica dello stile polimorfico

Verifica rapida: quale stile di codice usa meglio il polimorfismo in questo caso?

Riepilogo

Riepilogo: abbiamo scritto il codice usando la stessa API; ogni forma ha prodotto il proprio risultato. Operazioni come stampa, ordinamento e totale hanno funzionato con codice uniforme.

Domande Frequenti

La lezione «Comportamenti polimorfici» è gratuita?

Sì — il testo completo di «Comportamenti polimorfici» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 3 lezioni in totale.

Cosa imparerò in «Comportamenti polimorfici»?

Utilizzare il polimorfismo per stampare, ordinare e aggregare forme miste. Mantenere gli algoritmi piccoli e facili da leggere su dispositivi mobili. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 3.

Quanto tempo richiede la lezione «Comportamenti polimorfici»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Progettazione
  2. Implementazione
  3. Comportamenti polimorfici
← Torna a Java Academy