Як пишуть розумні люди (Шілдт, Троелсен) в своїх розумних книжках, інтерфейс визначає функціональні можливості, поведінка - «що саме слід робити, але не як це робити» (Г.Шілдт, Повне керівництво C #). В абстрактному класі «визначається лише сама загальна форма для всіх його похідних класів, а наповнення її деталями надається кожному з цих класів» (там же).
Fullstack Web Developer
Наприклад, потрібно написати клас для роботи з кешем.
У нас є клас Cache, який буде робити всю брудну роботу. Він в свою чергу буде використовувати бібліотеку під певний тип кешу (memcached, eaccelerator.). Для узгодженості, бібліотека повинна реалізувати інтерфейс cacheInterface, щоб клас Cache міг нормально працювати. Ось невеликий приклад.
Інтерфейс для бібліотеки:
Прошу вибачення, у мене заглючило клаву. Зараз доповню повідомлення.
Інтерфейс бібліотеки: pastebin.com/JpzRak2j
Бібліотека для memcache: pastebin.com/V1TwJrQB. ось для чого потрібні connect () і disconnect (). Хоча для eaccelerator і т.п. вони не потрібні, там можна писати return true;
Абстрактний клас зручно (принаймні мені) використовувати при написанні классвов для роботи з базою даних, з огляду на те, що абстрактний клас дозволяє використовувати protected властивості.
Сподіваюся, що пояснив доступно.