Contracts that only contain the prototype of functions instead of implementation are called abstract contracts. Such contracts cannot be compiled (even if they contain implemented functions alongside nonimplemented functions). If a contract inherits from an abstract contract and does not implement all nonimplemented functions by overriding, it will itself be abstract.
These abstract contracts are only provided to make the interface known to the compiler. This is useful when you are referring to a deployed contract and calling its functions.
Here is an example to demonstrate this:
contract sample1 { function a() returns (int b); } contract sample2 { function myFunc() { sample1 s = sample1(0xd5f9d8d94886e70b06e474c3fb14fd43e2f23970); ...