We introduce contracts for linear dynamical systems with inputs and outputs. Contracts are used to express formal specifications on the dynamic behaviour of such systems through two aspects: assumptions and guarantees. The assumptions are a linear system that captures the available knowledge about the dynamic behaviour of the environment in which the system is supposed to operate. The guarantees are a linear system that captures the required dynamic behaviour of the system when interconnected with its environment. In addition to contracts, we also define and characterize notions of contract refinement and contract conjunction. Contract refinement allows one to determine if a contract expresses a stricter specifications than another contract. On the other hand, contract conjunction allows one to combine multiple contracts into a single contract that fuses the specifications they express.