ADT separates the datastructure(s) (-> representation) and the methods/functions that operate on them (-> interface for accessing data).MultiMethods
OOP conflates concrete representation of data and interface.
Think of a classic Java class in an introductory OOP text. The class contains both instance fields and methods to manipulate them. Even though the fields are private, the interface is tied to a specific implementation. You can't substitute a different implementation, not even by subclassing.
I identify a notion of pure OO in which only *interfaces* are used as types. In this approach, there is no conflation of “concrete representation of a type with the interface used to access it”. The problem comes from using classes as types
Objects are NOT abstract data types (they are fundamentally different)
Java supports a blend of ADT and object-oriented programming