Vai al contenuto principale
Pubblicato il

abstract in Java

Condividi:

Introduzione

abstract è un modificatore in Java utilizzato principalmente in contesti di programmazione orientata agli oggetti. Svolge un ruolo cruciale nello sviluppo di sistemi modulari e flessibili.

Cos'è abstract?

In Java, abstract viene usato per indicare che:

  1. Una classe non può essere istanziata direttamente.
  2. Un metodo non ha corpo e deve essere implementato in una sottoclasse.

Perché usare Classi e Metodi abstract?

  1. Per Enfatizzare il Design: Le classi astratte sono spesso usate per definire un modello o un design per altre classi.
  2. Polimorfismo: Facilita il polimorfismo, poiché le classi derivate possono avere implementazioni diverse dei metodi astratti.
  3. Evitare la Creazione Accidentale di Oggetti: Poiché le classi astratte non possono essere istanziate, evitano la creazione accidentale di oggetti.

Differenza tra abstract e Interface

  • Metodi e Variabili: Mentre un'interfaccia può contenere solo firme di metodi, una classe astratta può contenere sia metodi completi che astratti.
  • Variabili di Stato: Le classi astratte possono contenere variabili di stato, mentre le interfacce no.
  • Ereditarietà Multipla: Java non supporta l'ereditarietà multipla di classi, ma consente a una classe di implementare più interfacce.

Illustrazione con il Codice

Le classi e i metodi astratti vengono utilizzati quando è necessaria una base comune, ma non vogliamo che quella base venga istanziata:

package com.caffeinealgorithm.programaremjava;

import java.util.ArrayList;
import java.util.List;

public class Abstract {
  public void Run() {
    // ClasseX.informazioneX();
    var istanza = new ClasseY();
    istanza.informazioneY();

    /*
      Paese: Portogallo
      Paese: Brasile
      Paese: Spagna
      Paese: Francia
      Paese: Italia
      Paese: Australia
      Paese: India
    */
  }
}

abstract class ClasseX {
  public static String comunita = "Caffeine Algorithm";
  public static List<String> paesi = new ArrayList<>();

  public static void informazioneX() {
    for (char carattere : comunita.toCharArray())
      System.out.printf("Carattere: %c\n", carattere);
  }

  public abstract void informazioneY();
}

class ClasseY extends ClasseX {
  public void informazioneY() {
    paesi.add("Portogallo");
    paesi.add("Brasile");
    paesi.add("Spagna");
    paesi.add("Francia");
    paesi.add("Italia");
    paesi.add("Australia");
    paesi.add("India");

    for (String paese : paesi)
      System.out.printf("Paese: %s\n", paese);
  }
}

In questo esempio, ClasseX è astratta, il che significa che non può essere istanziata, ma ClasseY (una classe derivata) può esserlo.

Conclusione

Il modificatore abstract è uno strumento prezioso nell'arsenale di uno sviluppatore Java. Promuove buone pratiche di design, aiutando gli sviluppatori a creare sistemi più robusti e manutenibili.

Happy coding!