diagramma UML delle classi diagramma UML di sequenza
// codice con la superclasse Persona e la sottoclasse Studente
public class Persona {
	private String nome, cognome;

	public void setNome(String n, String c) {
		nome = n;
		cognome = c;
	}

	public void printAll() {
		System.out.println("Nome: "+ nome+" "+cognome);
	}
}
import java.util.HashMap;

public class Studente extends Persona {
	private HashMap< String, Integer > tab = new HashMap< >(); // tabella che contiene esami e voti

	public void nuovoEsame(String e, int v) {
		tab.put(e, v);                     // inserisce una nuova coppia chiave valore in tabella
	}

	public float getMedia() {
		if (tab.size() == 0) return 0;
		float sum = 0;
		for (int voto : tab.values())      // voto e' l'i-mo valore della tabella
			sum += voto;
		return sum / tab.size();
	}
	
	@Override
	public void printAll() {
		super.printAll();
		for (String esame : tab.keySet())  // esame  e' l'i-ma chiave della tabella
			System.out.println("esame: " + esame + " voto: " + tab.get(esame));
		System.out.println("media = " + getMedia());
	}
}
public class MainEsami {
	public static void main(String[] args) {
		Studente s = new Studente();   // s e' di tipo Studente
		s.setNome("Mario", "Tanaka");  // metodo della superclasse di s
		s.nuovoEsame("Italiano", 6);   // metodo della classe di s
		s.nuovoEsame("Fisica", 8);
		s.printAll();                  // metodo della classe di s
		
		Persona p = s;   // p e' dichiarato di tipo Persona
		p.printAll();    // a runtime p punta all'istanza s 
	}
}