Una classe astratta è simile a una normale classe: può avere attributi e metodi, ma è caratterizzata dalla parola chiave abstract. Non può essere istanziata e la sua implementazione è demandata alle sottoclassi;
Esempio:
public abstract class Animale {
//campi
private boolean vivo=true;
//metodi
public boolean isVivo() { return this.vivo; }
}
La classe “animali” è una categoria concettuale, non esiste “il generico animale”, ma solo animali specifici;
Può avere, inoltre, metodi definiti ma non implementati (marcati anch’essi con la parola chiave abstract).
public abstract void metodo();
Una classe astratta, quindi dichiarata con “abstract class”, può anche non avere nessun metodo astratto.
Esempio
public abstract class MyClass {
public void hello() {
}
}
Viceversa, se una casse ha un metodo astratto deve essere per forza dichiarata abstract.
Esempio
public class MyClass {
public abstract void hello();// ERRORE DI COMPILAZIONE: la classe deve essere dichiarata astratta
}
Una classe astratta può avere dei costruttori, anche senza poter essere istanziata: il costruttore verrà utilizzato dalle sottoclassi.
Esempio
public abstract class MyClass {
public MyClass(int i) {
}
}
Una classe può estendere una classe astratta, a patto che fornisca tutte le implementazioni necessarie; qualora ciò non avvenga, resta astratta anche se i suoi metodi non sono abstract.
Esempio:
public abstract class Veicolo_classe_astratta
{
public abstract void accendi();
}
public class Auto_4x4 extends Veicolo_classe_astratta // classe concreta, essendo fornita un'implementazione per il metodo accen-di()
{
public void accendi()
{
System.out.println("veicolo acceso");
}
}

