8. Classi astratte

Un metodo astratto è un metodo che non ha un’implementazione specificata.

Una classe astratta è una classe che ha almeno un metodo astratto.

Non è possibile creare istanze di classi astratte.

abstract class Shape{
	Shape(){};
	abstract void show();
}

class Circle extends Shape{
	void show(){...}
}

Shape s = new Shape(); // NO!
Circle c = new Circle(); // OK
Shape s = new Circle(); // OK: polimorfismo

Classi e metodi finali

Se vogliamo prevenire la possibilità di creare delle sottoclassi a partire da una determinata classe, basta descriverla come finale.

final class C{...}
class C1 extends C{...} // NO!

In analogia, se non vogliamo che un metodo possa subire override, basta dichiararlo come finale.

class C{
	final void f(){...}
}

class C1 extends C{
	@Override
	void f(){...} // NO!
}

Attributi finali

Se definiamo un attributo come final, esso può essere assegnato una volta sola!

private final a = 0; // OK
a = sum(c, d); // NO! Ho già assegnato all'attributo a un valore...
---------------------------------------------------------------------
private final b;
b = sum(a, c); // OK