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.