A definition, such as a function defnition, introduces names that are bound to some expression, block, or a type.
def foo: Int = 1
On the other hand, an abstract declaration introduces only the names and their types. It can be a part of an abstract class definition.
def foo: Int