Interface ile abstract class arasındaki fark nedir?
Cevap
| Interface | Abstract class | |
|---|---|---|
| Amaç | Bir yetenek/sözleşme tanımlar ("can-do") | Ortak bir temel sağlar ("is-a") |
| Çoklu kullanım | Bir sınıf birden çok interface uygulayabilir | Yalnızca bir sınıftan türetilebilir (Java/C#) |
| Durum (field) | Örnek alanı tutamaz (yalnızca sabitler) | Örnek alanları ve constructor olabilir |
| Metot gövdesi | Java 8+ default metotlar hariç yok | Hem soyut hem somut metotlar |
| Erişim belirleyici | Metotlar varsayılan public | private/protected olabilir |
interface Payable {
void pay(BigDecimal amount);
}
abstract class Employee {
protected final String name;
Employee(String name) { this.name = name; }
abstract BigDecimal monthlySalary(); // alt sınıf belirler
public String payslip() { // ortak davranış
return name + ": " + monthlySalary();
}
}
class Engineer extends Employee implements Payable, Comparable<Engineer> {
...
}Ne zaman hangisi?
- Birbiriyle ilgisiz sınıflara ortak bir davranış kazandırmak istiyorsanız interface (
Comparable,Serializable). - Yakından ilişkili sınıflar ortak kod ve durum paylaşacaksa abstract class.
- Şüphedeyseniz interface ile başlayın; daha esnektir ve test için mock'lanması kolaydır.
Python'da resmi interface yoktur; abc.ABC ile abstract sınıf veya typing.Protocol ile yapısal (duck typing) arayüz tanımlanır.
İlgili OOP & Tasarım Desenleri soruları
- Clean code nedir? Yaygın code smell'ler nelerdir?
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Factory deseni nedir? Ne zaman kullanılır?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.