İnterface ve Abstract benzerlikleri veya farkları nelerdir?

İnterface ve Abstract class’lar new anahtar sözcüğü ile oluşturulamazlar.

!!! Bir sınıf birden fazla interface’i kalıtım olarak alabilir ama bir sınıfa bir tane abstract class kalıtım alınabilir !!!

Abstract sınıflar içerisinde metod gövdeleri tanımlanıp özellik değerleri ayarlandığı için genellikle sonradan üzerine ek geliştirilmek yapmak için kullanılıır ama interface de ise body ve değer set edilemediği için tamamen interface üzerinden tüm üyeleri implemente edilerek sıfırdan geliştirmeler yapılması gereken durumlarda kullanılır.

!!!Abstract class’lar içerisinde sadece abstract olarak işaretlenmiş metod ve özellikler implement edilmek zorundadır fakat interface içerisindeki tüm özellik ve metodlar implement edilmek zorundadır.!!!

Interface içerisinde özellik ve metodlarda erişim belirleyiciler kullanılmaz herşey public olarak kabul edilir fakat abstract sınıflarda kullanılabilir.

Bir abstract class sub’lar, fonksiyonlar ve property’ler için access modifier’lar içerebilir.

Bir interface sub’lar, fonksiyonlar ve property’ler için access modifier’lar içeremez. Herşey public kabul edilir.

Abstract sınıflara diğer sınıf ve interface’ler kalıtım olarak geçilebilir fakat interface’e yine farklı interface’ler haricinde herhangi bir yapı kalıtım olarak geçilemez.

İnterfaceler çoklu kalıtımı sağlamaya yardımcı abstract classlar ise çoklu kalıtımı desteklemez.

IPerson.cs;

    // interface new anahtar sözcüğü ile oluşturulamaz.
    
    // Bir sınıf birden fazla interface’i kalıtım olarak alınabilir.
    
    // Interface içerisinde boş metodlar tanımlanabilir
   
    // Interface içerisinde özellik ve metodlarda erişim belirleyiciler kullanılmaz fakat abstract sınıflarda kullanılabilir.

    interface IPerson
    {
        string Name { get; set; }
 
        string GetName();
 
        string GetNameWithDesciption();
    }

Person.cs;

// <summary>// Abstract sınıfa IPerson arayüzünü kalıtım olarak geçebildim ama tam tersi durum mümkün değil
//yani IPerson arayüzüne yine arayüz haricinde sınıfı kalıtım olarak geçemiyoruz.
// Interface içerisinde özellik ve metodlarda erişim belirleyiciler kullanılmaz fakat abstract sınıflarda kullanılabilir.

public abstract class Person : IPerson // Buradaki arayüzü kalıtım olarak geçmemin bir esprisi yok dikkate almayınız sadece abstract class'a bir arayüzü kalıtım olarak geçebildiğimizi göstermek için ekledim
    {
      
      // Bunu abstract olarak işaretlediğimiz için Person sınıfını kalıtım olarak
      // alan sınıf bunu zorunlu olarak kendi içine implement edecektir.
      
        public abstract string Name { get; set; }
 
 //Abstract class'larda hem boş metodlar tanımlanabilir hemde içi dolu metodlar tanımlabilir.
      
        public string GetName()
        {
            return Name;
        }
//Abstract class'larda hem boş metodlar tanımlanabilir hemde içi dolu metodlar tanımlabilir.
//Abstract olarak işaretlendiğinden Person sınıfını kalıtım alan sınıf bu metodu implement etmek zorundadır.
       
        public abstract string GetNameWithDesciption(); //GetNameWithDescription() adlı metodun gövdesi yok ve abstract olarak işaretlenmiş o yüzden bu metodun gövdesinin tanım işi bu sınıfı miras alacak diğer sınıfa yüklenmiştir.
    }
}

Last updated