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