Интерфейс предназначен для декларирования внешнего API без уточнения реализации. В нем должны быть лишь публичные члены.
Вообще говоря, это искусственное ограничение, принятое для удобства. В том же C++ в качестве интерфейсов используются чисто виртуальные (абстрактные) классы без состояния. Наличие же специальной синтаксической конструкции (интерфейсов, как в C# или Java) позволяет явно подчеркнуть, что программиста там не ждет никакого сюрприза и этот тип используется как "клей" между другими классами.