Με τη χρήση final και sealed
συμπληρώνονται στη Java οι
αλγεβρικοί τύποι δεδομένων (algebraic data type).
Τύπος γινομένου (product type):
κλάση που περιέχει άλλους τύπους.
Αν οι τύποι είναι Α και Β, με |Α| και |Β| δυνατές τιμές,
ο τύπος γινομένου μπορεί να έχει |Α| × |Β| δυνατές τιμές.
Τύπος αθροίσματος (sum type):
κλάση που επεκτείνεται από ένα κλειστό σύνολο κλάσεων.
Ο τύπος αθροίσματος μπορεί να έχει |Α| + |Β| δυνατές τιμές.
Ο τύπος αθροίσματος μάς επιτρέπει να ορίσουμε αξιόπιστα
διαφορετική συμπεριφορά με τη χρήση switch.
Ο μεταγλωττιστής ελέγχει αυτόματα ότι έχει υλοποιηθεί
κώδικας για όλες τις κλάσεις του τύπου
(χωρίς χρήση default).
Σε σχέση με μεθόδους ανά κλάση, αυτός ο τρόπος
σχεδίασης είναι δόκιμος όταν συχνά προστίθεται ή αλλάζει
λειτουργικότητα σε σύνολο πολλών κλάσεων.