An abstract data type (ADT) is a mathematical abstraction of a real world thing and can be implemented in a concrete data type in different languages.
An ADT defines operations for the given type and mathematically expresses their behaviour.
Concrete implementations of an ADT can differ from each other. In that way classes are implementing the ADT and methods implement operations.
Classes have a slightly different terminology than ADTs and add other characteristics, like:
- they for example may live in packages
- their members are called attributes and methods
- attributes and methods have a certain visibility constraint
And methods:
- can be abstract, too. but then, their behaviour isn't defined - only their method signature - an inheriting concrete class must provide an implementation
Don't confuse abstract data types with abstract classes in a concrete language.