Hiç bilginiz yoksa fikir sahibi olmanız için çok kısa bilgi vereceğim;
Abstract class deyince aklına alt sınıfların genel özelliklerini tutan bir sınıf gelmeli, interface ise onu implemente eden sınıfların yapabileceklerini tutan bir şablon gibi düşünmelisin. Abstract class "is a", interface "has a" şeklinde düşünülür.
abstract class->canlı varlıklar ise, insan bunu extend eder, kedi extend eder, kuş extend eder vb. insan da kedi de kuş da birer canlıdır. (insan "is a" canlı) abstract sınıfta mesela integer tipinde canlının yaşı bilgisini tutabilirsiniz, tüm canlıların yaşı vardır gibi düşünün, getYaş, setYaş methodlarını abstract sınıfa eklersiniz.
interface-> konuşabilir, yürüyebilir, uçabilir vb. interfaceler tanımlayabilirsiniz. insan konuşabilir, yürüyebilir interfacelerini implemente eder. kedi ve kuş konuşabilir interfaceini implemente edemez. konuşabilir interfacei içine konus() gibi bir method bulunur, insan sınıfı böylece konuşabilir. (insan "has a" konuşma yeteneği)
Mimari oluştururken hangisini kullanacağınız sizin tasarımınıza kalmış, bu basit örneği isterseniz sadece interface ile ya da sadece abstract classlar ile de yapabilirsiniz. (mesela canlı varlıklar abstract classı yerine canlı varlık interface i oluşturup da getYaş, setYaş şeklinde methodları bu interfacei implemente eden sınıflara bu methodları kullanma sorumluluğunu atabilirsiniz) Aslında uygulanması gereken yukarda bahsettiğim "is a" "has a" mantığını kullanmaktır.
Soru oldukça genel, internette bu soruların cevabını pek çok yerde text, görsel, video gibi formatlarda istenen düzeyde bulabileceğinizi düşünüyorum, kolay gelsin.