V prostředí objektově orientovaných programovacích jazyků jsou pro definici abstraktních datových typů k dispozici třídy a v některých jazycích máme dokonce přímo konstrukce, umožňující definovat abstraktní rozhraní.
V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:
public class Time {
public Time(int hours, int minutes) {
this.hours = hours; this.minutes = minutes;
}
public int getHours() { return hours; }
public int getMinutes() { return minutes; }
public void increment(int delta) {
int newMins = minutes + delta;
minutes = newMins % 60;
hours += newMins / 60;
}
private int hours;
private int minutes;
}
Povšimněte si, že třída Time obsahuje ve svých veřejných členech pouze metody getHours(), getMinutes() a increment(). Konstruktor createTime() je nahrazen skutečným konstruktorem a samotná hodnota je vnitřně reprezentovaná dvojicí proměnných hours a minutes pro počet hodin a minut. Rozdíl ve vnitřní reprezentaci proti předchozí ukázce se navenek nijak viditelně neprojeví, neboť uživatel pracuje pouze s veřejnými metodami objektu.