Interface ile abstract class arasındaki fark nedir?

Cevap

InterfaceAbstract class
AmaçBir yetenek/sözleşme tanımlar ("can-do")Ortak bir temel sağlar ("is-a")
Çoklu kullanımBir sınıf birden çok interface uygulayabilirYalnızca bir sınıftan türetilebilir (Java/C#)
Durum (field)Örnek alanı tutamaz (yalnızca sabitler)Örnek alanları ve constructor olabilir
Metot gövdesiJava 8+ default metotlar hariç yokHem soyut hem somut metotlar
Erişim belirleyiciMetotlar varsayılan publicprivate/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.

  1. Clean code nedir? Yaygın code smell'ler nelerdir?OrtaOOP & Tasarım DesenleriYazılım Müh.
  2. Dependency Injection nedir? IoC container ne işe yarar?ZorOOP & Tasarım DesenleriYazılım Müh.
  3. Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  4. Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?OrtaOOP & Tasarım DesenleriYazılım Müh.
  5. Factory deseni nedir? Ne zaman kullanılır?OrtaOOP & Tasarım DesenleriYazılım Müh.
  6. Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?ZorOOP & Tasarım DesenleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle