Basic Declarations and Definitions 

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