Interface ve Abstract class arasındaki farklar nelerdir?

Bu ikili, nesne yönelimli programlamada (OOP) sınıfları soyutlamaya yarayan yöntemlerden ikisidir. Bu ikisinin ortak oldukları ve farklı oldukları yönler vardır.

1) Abstract

Yazdığımız sınıflar arasında inheritance(kalıtım) uygularken kullanırız. Alt sınıflar abstractsınıfı inherit alırlar. Abstract class içindeki implement edilmiş tüm method’lar diğer class’da da geçerlidir.

Abstract classdan implement ettiğimiz bir class içerisinde, sadece abstract class içerisinde abstract olarak tanımlanmış method, property gibi vb.lerini implement etmek mecburidir. Diğer method’lar zaten tanımlıdır ve implement edilmesi mecburi değildir.

Abstract sınıflar genelde is-a ilişkilerinde kullanılır.
Örnek vermek gerekirse;

+Ferrari is-a Araba

Ferrari bir arabadır ve arabanın sahip olduğu tüm özelliklere sahiptir.

abstract class Araba
{
public string Marka { get; set; }
public int VitesSayisi { get; set; }
// Kısacası arabaların sahip oldukları tüm ortak özellikler
public abstract void MaximumHiz();
// Override edilecek methodumuz çünkü her arabanın kendine özgü bir maximum hız bilgisi vardır
}
/// /// Ferrari’yi Araba sınıfımızdan inherit alıyoruz. ///
class Ferrari : Araba
{
/// /// Maximum hız bilgimizi override ediyoruz ve Araba abstract sınıfımızın sahip olduğu tüm özelliklere sahip oluyor. ///
public override void MaximumHiz()
{
Console.WriteLine(“Ferrari’nin maximum hızı: 300”);
}
}
Örneğimizden de anlaşılacağı gibi araba örneğimizden yola çıkarak “Araba” isminde bir abstract sınıf oluşturuyoruz ve “Ferrari” bu sınıfdan inherit alarak Arabaların sahip olmuş oldukları tüm ortak özelliklere sahip olmuş oluyor.

Abstract sınıfın genel özelliklerini sıralayacak olursak;

  1. Kod içerisinde “new” anahtar sözcüğü ile oluşturulamazlar.
  2. Bir sınıf sadece bir abstract sınıfı inherit alabilir.
  3. Inherit alıcak sınıflar arasında genelde “is-a” ilişkisi vardır.
  4. Abstract sınıfda method ve değişkenler tanımlanabilir.

2) Interface

Interface sınıfında sadece method tanımları bulunur. İçlerine kod parçacığı yazılmaz. İçerisinde tanımlanan method tanımları bu interface’i implemente edecek diğer sınıflar tarafından implement edilmesi zorunludur.

Interfaceler başka bir interface den inherit olabilirler.
Interface’ler genelde can-do ilişkisi vardır.

Örnek vermek gerekirse;

+Ferrari can-do drive itself

Ferrari kendi kendini sürebilir .Gibi yapabileceği ek özellikler interface olarak tanımlanıp, implemente edilebilir./// /// Bazı arabalar cabriolet olabilir hepsinin ortak bir özelliği değildir. ///

interface ICabrioled {

void TavanTipi(); }

abstract class Araba{

public string Marka { get; set; }

public int VitesSayisi { get; set; }

// Kısacası arabaların sahip oldukları tüm ortak özellikler

public abstract void MaximumHiz();

// Override edilecek methodumuz çünkü her arabanın kendine özgü bir maximum hız bilgisi vardır

}

/// /// Ferrari’yi Araba sınıfımızdan inherit alıyoruz ve yeniden şekillendiriyoruz. Ferrarimiz cabriolet ve ICabriolet özelliğini implemente ediyoruz. ///

class Ferrari : Araba, ICabrioled {

/// /// Maximum hız bilgimizi override ediyoruz ve Araba abstract sınıfımızın sahip olduğu tüm özelliklere sahip oluyor. ///

public override void MaximumHiz() {

Console.WriteLine(“Ferrari’nin maximum hızı: 300”); }

/// /// ICabrioled’i implemente ettiğimiz için TavanTipi methodumuzu tanımlıyoruz. ///

public void TavanTipi() {

Console.WriteLine(“Metal tavan”); }

Interface’ler içerisine kod parçacıkları yazılmaz, sadece method tanımları bulunur. Bunuda gösterebilmek amaçlı sadece “TavanTipi” isminde bir tanımlama yaptık ve “Metal tavan” olarak belirttik.

Interface sınıfının genel özelliklerini sıralayacak olursak;

  1. Kod içerisinde “new” anahtar sözcüğü ile oluşturulamazlar.
  2. Bir sınıf birden fazla interface implemente edebilir.
  3. Implemente edicek sınıflar arasında genelde “can-do” ilişkisi vardır.
  4. Interface içerisine sadece boş method’lar tanımlanabilir.

Yorum bırakın