È un concetto cardine della programmazione orientata agli oggetti. È una forma di riuso del software, un meccanismo in cui una nuova classe (detta sottoclasse) è creata assorbendo i membri (campi e metodi) di una classe già esistente (della superclasse), aggiungendo nuovi membri e ridefinendo i metodi della superclasse (ma tipicamente non i campi).

Si dice che una sottoclasse estende la superclasse.

Si può controllare se un oggetto è un tipo o un sottotipo di un altra classe con l’operatore binario <oggetto> instanceof <classe>.

N.B.: extends può essere usato una e una sola volta da una classe, quindi l’ereditarietà multipla può essere realizzata solo con le interfacce.

Esempio:

public class Forma
{
	public void disegna
	{
	...
	}
}
 
// la classe Triangolo estende (o eredita da) Forma
public class Triangolo extends Forma
{
	private double base;
	private double altezza;
 
	public Triangolo(double base, double altezza)
	{
		this.base = base;
		this.altezza = altezza;
	}
 
	public double getBase()
	{
		return base;
	}
 
	public double getAltezza()
	{
		return altezza;
	}
}

diagramma delle classi in UML